控制器核心代碼php
//用戶認證 $status=Auth::guard('admin')->attempt([ 'username'=>$request->input('username'), 'password'=>$request->input('password'), ]);
登陸操做就是去數據庫用戶表裏面找用戶名,找到就查看密碼是否正確,若是正確就存入session等。
其實這些登陸操做都是同樣的,lavarel其實已經給咱們作好了。web
登陸操做就是去數據庫用戶表裏面找用戶名,找到就查看密碼是否正確,若是正確就存入session等。
其實這些登陸操做都是同樣的,lavarel其實已經給咱們作好了。
數據庫
數據表api
數據庫表session
默認是找user表(User模型),但是咱們是後臺登陸,用的是admins表,因此須要用Admin模型,因此須要從新配置模型。app
1 <?php 2 3 return [ 4 5 'defaults' => [ 6 'guard' => 'web', 7 'passwords' => 'users', 8 ], 9 10 11 'guards' => [ 12 'admin' => [ 13 'driver' => 'session', 14 'provider' => 'admins', 15 ], 16 'web' => [ 17 'driver' => 'session', 18 'provider' => 'users', 19 ], 20 21 'api' => [ 22 'driver' => 'token', 23 'provider' => 'users', 24 ], 25 ], 26 27 28 'providers' => [ 29 'admins' => [ 30 'driver' => 'eloquent', 31 'model' => \App\Model\Admin::class, 32 ], 33 'users' => [ 34 'driver' => 'eloquent', 35 'model' => App\User::class, 36 ], 37 38 ], 39 40 41 ];
看5-8行:defaults的guard默認是web,也就是16-19行中的users表,也就是33-36行的User模型(App\User::class)ide
這不是咱們須要的,因此咱們添加了12-15行,也就是admins的guards,而且關聯了29-32行的Admin模型(\App\Model\Admin::class)post
1 <?php 2 3 namespace App\Model; 4 5 use Illuminate\Database\Eloquent\Model; 6 use Illuminate\Foundation\Auth\User; 7 8 class Admin extends User 9 { 10 // 11 }
注意的是模型繼承了User模型(第6行和第8行),因此有了找表,驗證密碼等一系列用戶認證的方法學習
1 <?php 2 3 namespace App\Http\Controllers\Admin; 4 5 use Illuminate\Http\Request; 6 use App\Http\Controllers\Controller; 7 use Auth; 8 9 class EntryController extends Controller 10 { 11 12 public function index(){ 13 return '後臺。。。。'; 14 } 15 16 /** 17 * 登陸視圖 18 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View 19 */ 20 public function login(){ 21 return view('admin.entry.login'); 22 } 23 24 /** 25 * post處理登陸 26 */ 27 public function loginCheck(Request $request){ 28 //用戶認證 29 $status=Auth::guard('admin')->attempt([ 30 'username'=>$request->input('username'), 31 'password'=>$request->input('password'), 32 ]); 33 //dd($status); 34 if($status){ 35 //登陸成功 36 return redirect('/admin/index'); 37 }else{ 38 //登陸失敗 39 //return back()->withInput()->with('error','用戶名或密碼錯誤!'); 40 return redirect('/admin/login')->withInput()->with('error','用戶名或密碼錯誤!'); 41 } 42 } 43 }
第7行:use Auth;服務來驗證ui
第29行:指定guard爲admin,也就是找數據庫中的admins表,也就是找模型中的Admin模型
因此第34-41行:咱們只須要單純的進行成功失敗跳轉便可,別的Auth驗證都給咱們作了(好比比較用戶名和密碼等)
登陸失敗示例
登陸成功示例
<div class="login-box-body"> <p class="login-box-msg">極大提升學習效率的legend3</p> <form action="/admin/login" method="post"> {{csrf_field()}} <div class="form-group has-feedback"> <input type="text" id="username" name="username" class="form-control" required placeholder="用戶名" value="{{old('username')}}"> <span class="glyphicon glyphicon-phone form-control-feedback"></span> </div> <div class="form-group has-feedback"> <input type="password" id="password" name="password" class="form-control" required placeholder="密碼" value="{{old('password')}}"> <span class="glyphicon glyphicon-lock form-control-feedback"></span> </div> <div class="row"> <div class="col-xs-8"> <div class="checkbox icheck"> <label> <input type="checkbox"> 記住我 </label> </div> </div> <!-- /.col --> <div class="col-xs-4" style="padding-top: 4px;"> <button type="submit" class="btn btn-primary btn-block btn-flat">登陸</button> </div> <!-- /.col --> </div> @if(session('error')) <div class="alert alert-danger">{{session('error')}}</div> @endif </form> <hr> <div> <a href="{{url('/reg')}}" class="text-center">註冊</a> <a href="#" style="margin-left: 15px;">忘記密碼</a> <a href="" style="margin-left: 15px;">登陸遇到問題</a> </div> </div> <!-- /.login-box-body --> </div>