laravel 驗證碼 auth方式登錄 中間件判斷session是否存在


首先下載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); } } 

  

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM