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