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