後盾網lavarel視頻項目---lavarel用戶認證明例

後盾網lavarel視頻項目---lavarel用戶認證明例

1、總結

一句話總結:

主要是用的Auth認證,因此配置是配置的auth(config/auth.php),控制器中調用也是用的Auth(use Auth;)

控制器核心代碼php

  //用戶認證
  $status=Auth::guard('admin')->attempt([
      'username'=>$request->input('username'),
      'password'=>$request->input('password'),
  ]);

 

 

一、lavarel用戶認證明例步驟?

一、配置auth:config/auth.php
二、模型繼承包含auth方法的模型:use Illuminate\Foundation\Auth\User;
三、控制器中調用auth的方法進行用戶認證:$status=Auth::guard('admin')->attempt([

 

二、lavarel用戶認證的原理是什麼?

lavarel把登陸要作的操做給咱們封裝進了auth裏面:咱們須要的時候直接用就能夠了

登陸操做就是去數據庫用戶表裏面找用戶名,找到就查看密碼是否正確,若是正確就存入session等。
其實這些登陸操做都是同樣的,lavarel其實已經給咱們作好了。web

 

三、檢測用戶是否登陸的原理是什麼?

用戶認證以後用戶的用戶名密碼信息等會被存入sesson,判斷用戶是否登陸的時候就判斷是否有這部分session

 

四、驗證用戶登陸的中間件的做用是根據用戶是否登陸進行跳轉,那它是如何判斷用戶是否登陸的?

根據session中是否有用戶的信息

 

 

2、lavarel用戶認證明例

登陸操做就是去數據庫用戶表裏面找用戶名,找到就查看密碼是否正確,若是正確就存入session等。
其實這些登陸操做都是同樣的,lavarel其實已經給咱們作好了。


數據庫

 

數據表api

 

 數據庫表session

 

 

 

 

默認是找user表(User模型),但是咱們是後臺登陸,用的是admins表,因此須要用Admin模型,因此須要從新配置模型。app

 

一、配置模型(config/auth.php)

 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::classide

這不是咱們須要的,因此咱們添加了12-15行,也就是admins的guards,而且關聯了29-32行的Admin模型(\App\Model\Admin::classpost

 

二、模型(app/Model/Admin.php)

 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行),因此有了找表,驗證密碼等一系列用戶認證的方法學習

 

三、控制器中進行認證(app/Http/Controllers/Admin/EntryController.php)

 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驗證都給咱們作了(好比比較用戶名和密碼等)

 

四、頁面示例

登陸失敗示例

 

登陸成功示例

 

五、視圖核心代碼(resources/views/admin/entry/login.blade.php)

    <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>
相關文章
相關標籤/搜索