• 后盾网lavarel视频项目---lavarel用户认证实例


    后盾网lavarel视频项目---lavarel用户认证实例

    一、总结

    一句话总结:

    主要是用的Auth认证,所以配置是配置的auth(config/auth.php),控制器中调用也是用的Auth(use Auth;)

    控制器核心代码

      //用户认证
      $status=Auth::guard('admin')->attempt([
          'username'=>$request->input('username'),
          'password'=>$request->input('password'),
      ]);

    1、lavarel用户认证实例步骤?

    1、配置auth:config/auth.php
    2、模型继承包含auth方法的模型:use IlluminateFoundationAuthUser;
    3、控制器中调用auth的方法进行用户认证:$status=Auth::guard('admin')->attempt([

    2、lavarel用户认证的原理是什么?

    lavarel把登录要做的操作给我们封装进了auth里面:我们需要的时候直接用就可以了

    登录操作就是去数据库用户表里面找用户名,找到就查看密码是否正确,如果正确就存入session等。
    其实这些登录操作都是一样的,lavarel其实已经给我们做好了。

    3、检测用户是否登录的原理是什么?

    用户认证之后用户的用户名密码信息等会被存入sesson,判断用户是否登录的时候就判断是否有这部分session

    4、验证用户登录的中间件的作用是根据用户是否登录进行跳转,那它是如何判断用户是否登录的?

    根据session中是否有用户的信息

    二、lavarel用户认证实例

    登录操作就是去数据库用户表里面找用户名,找到就查看密码是否正确,如果正确就存入session等。
    其实这些登录操作都是一样的,lavarel其实已经给我们做好了。


    数据表

     数据库表

    默认是找user表(User模型),可是我们是后台登录,用的是admins表,所以需要用Admin模型,所以需要重新配置模型。

    1、配置模型(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' => AppModelAdmin::class,
    32         ],
    33         'users' => [
    34             'driver' => 'eloquent',
    35             'model' => AppUser::class,
    36         ],
    37 
    38     ],
    39 
    40 
    41 ];

    看5-8行:defaults的guard默认是web,也就是16-19行中的users表,也就是33-36行的User模型(AppUser::class

    这不是我们需要的,所以我们添加了12-15行,也就是admins的guards,并且关联了29-32行的Admin模型(AppModelAdmin::class

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

     1 <?php
     2 
     3 namespace AppModel;
     4 
     5 use IlluminateDatabaseEloquentModel;
     6 use IlluminateFoundationAuthUser;
     7 
     8 class Admin extends User
     9 {
    10     //
    11 }

    注意的是模型继承了User模型(第6行和第8行),所以有了找表,验证密码等一系列用户认证的方法

    3、控制器中进行认证(app/Http/Controllers/Admin/EntryController.php)

     1 <?php
     2 
     3 namespace AppHttpControllersAdmin;
     4 
     5 use IlluminateHttpRequest;
     6 use AppHttpControllersController;
     7 use Auth;
     8 
     9 class EntryController extends Controller
    10 {
    11 
    12     public function index(){
    13         return '后台。。。。';
    14     }
    15 
    16     /**
    17      * 登录视图
    18      * @return IlluminateContractsViewFactory|IlluminateViewView
    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;服务来验证

    第29行:指定guard为admin,也就是找数据库中的admins表,也就是找模型中的Admin模型

    所以第34-41行:我们只需要单纯的进行成功失败跳转即可,别的Auth验证都给我们做了(比如比较用户名和密码等)

    4、页面示例

    登录失败示例

    登录成功示例

    5、视图核心代码(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>
    
     
  • 相关阅读:
    第2课 有符号与无符号
    第1课 基本数据类型
    HDU 5821 Ball
    Codeforces Round #228 (Div. 2) C. Fox and Box Accumulation
    HDU 5810 Balls and Boxes
    HDU 5818 Joint Stacks
    HDU 5813 Elegant Construction
    Codeforces Round #357 (Div. 2)C. Heap Operations
    Codeforces Round #364 (Div. 2) C. They Are Everywhere
    HDU5806 NanoApe Loves Sequence Ⅱ
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11504127.html
Copyright © 2020-2023  润新知