首先下载laravel的插件 composer下载  实现验证码       composer require mews/captcha

config/app.php进行配置

‘providers’ => [
// …
Mews\Captcha\CaptchaServiceProvider::class,
] ‘aliases’ => [
// …
‘Captcha’ => Mews\Captcha\Facades\Captcha::class,
]

 终端手脚架运行  php artisan vendor:publish    10

生成 captcha.php文件 在文件中更改默认配置

编写 只有用户名 密码 验证码的 登录 的html页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head>
<body>
<div style="width: 500px ;height: 400px ;margin: 0 auto;background-color: #0C9A9A">
<div style="font-size: 30px;margin: 0 auto">登录页面</div>
<form action="{{route('week2.login')}}" method="post" style="width: 300px;height:300px ;margin: 0 auto">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">用户名</label>
<input type="text" class="form-control" id="exampleInputEmail1" name="username" placeholder="用户名">
</div>
<div class="form-group">
<label for="exampleInputPassword1">密码</label>
<input type="password" class="form-control" id="exampleInputPassword1" name="password" placeholder="Password">
</div>
<div class="form-group">
<label for="exampleInputFile">验证码</label>
<div style="margin-left: 10px;">
<img src="{{ captcha_src('flat') }}" style="cursor: pointer" onclick="this.src='{{captcha_src('flat')}}&'+Math.random()" >
</div>
<input type="text" class="form-input" name="captcha" placeholder="请输入验证码">
</div> <button type="submit" class="btn btn-default">登录</button>
</form>
</div>
</body>
</html>

 auth方式验证用户信息

<?php

namespace App\Models;

use \Illuminate\Foundation\Auth\User as AuthUser;
//创建模型层 继承laravel自带user验证
class LoginModel extends AuthUser 
{
//绑定数据表 也创建直接绑定表的model
protected $table = 'logins' ;
//设置隐藏字段
protected $guarded =[];
}

脱坑  测试时用户数据库密码 https://www.jisuan.mobi/p163u3BN66Hm6JWx.html 可以修改数据库测试密码

 在 config/auth.php 中修改  绑定的模型层

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => \App\Models\LoginModel::class,
],

  

手脚架 创建中间件     php artisan make:middleware CheckAge

这里写的是全局路由前置中间件  见 laravel手册  https://learnku.com/docs/laravel/5.8/middleware/3891

app/Http/Kernel.php 中的  $routeMiddleware  属性中列出这个中间件

 protected $routeMiddleware = [

        'login' => \App\Http\Middleware\LoginkAge::class,
];

  路由

Route::get('list','UsersController@list')->name('week2.list')->middleware('login');   // 路由中 middleware(注册的名字) 在分组也可以用

  中间件文件写入

public function handle($request, Closure $next)
{
//auth验证用户是否登录
if (!auth()->check()&&!($request->session()->get('name'))
){ return redirect(route('week2.index'),302); } return $next($request); }

  控制器接收处理全部数<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; class LoginController extends Controller
{
// 登录页面
public function index(){
return view('week2.login');
}
// 登录处理
public function login(Request $request){
$posts['captcha'] = $request->input('captcha');
$rule = [
'captcha'=>'required|captcha',
];
$massage = [
'captcha.required'=>'验证码不为空',
'captcha.captcha'=>'验证码错误',
];
$validate = Validator::make($posts,$rule,$massage);
if ($validate->fails()) {
return $validate->errors()->first() ;
}
$post = $request->input('_token'); $post = $request->validate([
"username" => 'required',
'password' => 'required',
],[
'username.required' =>'用户名不为空',
'password.required' =>'密码不为空',
]);
//查询是否正确
$bool = auth()->attempt($post);
if (!$bool){
return view('week2.login');
}
//正确跳转到 欢迎页面
$request->session()->put('name',$post);
return redirect(route('week2.list'),302); } } 

  

laravel 验证码 auth方式登录 中间件判断session是否存在的更多相关文章

  1. Jmeter实现Basic Auth方式登录

    背景 在实际测试日常中,产品有两种登录方式,一种是普通登录方式,另一种则是Basic Auth方式登录.两种登录对应着产品中不同的操作,对权限进行了一个划分. Postman登录 使用Postman登 ...

  2. Django--用户认证组件auth(登录用-依赖session,其他用)

    一.用户认证组件auth介绍 二.auth_user表添加用户信息 三.auth使用示例 四.auth封装的认证装饰器 一.用户认证组件auth介绍 解决的问题: 之前是把is_login=True放 ...

  3. 登录页面判断session退出登录清空session

    1 2 3 4 5 6 if(empty($_POST)){      $_SESSION = array();     if(isset($_COOKIE[session_name()])){    ...

  4. laravel更改默认的登录密码加密方式

    laravel更改默认的登录密码加密方式   laravel 默认用的登录密码加密方式是: $password = Hash::make('password'); 而我平时用的密码加密方式是: $pa ...

  5. TODO:Laravel 内置简单登录

    TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...

  6. 第一零二天上课 PHP TP框架 引入文件路径问题和调用验证码的方式

    外部文件引入到视图模板的方式       1,将外部文件放在Public文件夹下,用load标签引入       2,在模板出书写引入代码(方法有很多,只有以下方法不容易出问题) <load h ...

  7. MVC - 单点登录中间件

    本章将要和大家分享的是一个单点登录中间件,中间件听起来高深其实这里只是吧单点登录要用到的逻辑和处理流程封装成了几个方法而已,默认支持采用redis服务保存session的方式,也可以使用参数Func& ...

  8. JWT(JSON Web Token) 多网站的单点登录,放弃session

    多个网站之间的登录信息共享, 一种解决方案是基于cookie - session的登录认证方式,这种方式跨域比较复杂. 另一种替代方案是采用基于算法的认证方式, JWT(json web token) ...

  9. 使用COOKIE实现登录 VS 使用SESSION实现登录

    注:本文使用的代码基于PHP,其他语言逻辑同理. 一:使用COOKIE实现登录验证 使用cookie实现登录的方式,主要通过一些单向的加密信息进行验证.比如admin用户登录了之后,服务端生成一个co ...

随机推荐

  1. breakpad系列(2)——在Linux中使用breakpad

    本文来自breakpad源码目录中doc目录下的linux_starter_guide.md,建议直接去看原文. 如何将breakpad添加进你的Linux程序 本文档是在Linux上使用Breakp ...

  2. Redis5设计与源码分析读后感(四)压缩列表

    一.引言 上一节我们总结了跳跃表的知识,我们知道了有序数组可以用跳跃表实现,也可以用压缩列表来实现,这一篇文章我们来总结一下压缩列表相关的知识. 二.压缩列表简介 定义:压缩列表 ziplist 本质 ...

  3. 机器学习-线性规划(LP)

    线性规划问题 首先引入如下的问题: 假设食物的各种营养成分.价格如下表: Food Energy(能量) Protein(蛋白质) Calcium(钙) Price Oatmeal(燕麦) 110 4 ...

  4. 开发基于Django和Websocket的堡垒机

    WebSSH有很多,基于Django的Web服务也有很多,使用Paramiko在Python中进行SSH访问的就更多了.但是通过gevent将三者结合起来,实现通过浏览器访问的堡垒机就很少见了.本文将 ...

  5. 026 01 Android 零基础入门 01 Java基础语法 03 Java运算符 06 if-else条件结构

    026 01 Android 零基础入门 01 Java基础语法 03 Java运算符 06 if-else条件结构 本文知识点:Java中的if-else条件结构语句 上文回顾--if条件结构 如果 ...

  6. 022 01 Android 零基础入门 01 Java基础语法 03 Java运算符 02 算术运算符

    022 01 Android 零基础入门 01 Java基础语法 03 Java运算符 02 算术运算符 本文知识点:Java中的算术运算符 算术运算符介绍 算术运算符代码示例 注意字符串连接问题和整 ...

  7. Ubuntu18.04下Git安装及使用

    Ubuntu 18.04 git安装配置及基本使用 git Ubuntu 准备 对Ubuntu相关资源升级 1. linux资源升级 sudo apt-get update 2. linux软件升级 ...

  8. SpringBoot logback 配置文件自定义属性

    添加自定义属性类 package com.cus.config; import ch.qos.logback.core.PropertyDefinerBase; import org.springfr ...

  9. Idea 配置codeTemplate

    注释模版 注释模版是指在编写代码时针对不同的类,方法或者其他文件时自动生成的注释信息.在eclipse我们很熟悉可以利用 /**,Enter在方法,类名等前一行来生成注释模板,但是IntelliJ I ...

  10. 基于Python的接口自动化实战-基础篇之读写配置文件

    引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值.为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这些变量和变 ...