• Laravel 自带的Auth验证登录方法


    laravel有自带的登录验证

    在laravel有自带的登录验证。只要建立对应的表和配置一些文件就能够使用,无需开发者自己去实现登录逻辑。

    第一步:配置方面

    config下的auth.php配置guardsproviders 。 之后新建文件和数据库名称要和这里的对应。

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        
        //Laravel Auth 验证登录
        'member' => [
            'driver' => 'session',
            'provider' => 'member',
        ],
    ],
        
    
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppModelsUser::class,
        ],
        //
        'member' => [
            'driver' => 'eloquent',
            'model' => AppModelsMember::class,
        ],
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
    
    

    第二步:数据库方面

    1 .新建Member表,作为用户表

    2.模型中新建Member.php 文件对应,文件名称取决于配置文件中的名称

    class Member extends Authenticatable
    {
        use HasFactory;
    
        protected $table = 'xlyhb';
        public $timestamps = false;
        public $incrementing = false;
    
        protected $guarded = [];
    
        //protected $hidden = [];
    
    
    
        public function getAuthPassword()
        {
            //return $this->attributes['pwdmd5'];
            return $this->pwdmd5;   //或其它名称,以上两种写法都OK
        }
    
    
        
    }
    

    第三步:控制器中使用

    Auth::guard('Member')->attempt($credentials)); 尝试登录
    Auth::guard($guard)->guest();判断用户是否来宾,可用于中间件,判断用户是否登录,返回false,则已经登录,反之,跳转会登录页面
    Auth::guard($guard)->user();获取已经登录的用户信息,注意在__construct()中无法获取,可以在中间件里面获取
    
    $credentials = $request->only('username', 'password');
    
    /**
     * 使用laravel自带的Auth登录
     * 1、密码使用的是hash加密 $crypt = password_hash($password, PASSWORD_DEFAULT);
     */
    if(Auth::guard('admin')->attempt($credentials)){
    	return response()->json(['code' => 200, 'msg' => '登录成功']);
    }else{
    	return response()->json(['code' => 403, 'msg' => '用户名或密码错误']);
    }
    

    第四步:创建web中间件

    php artisan make:middleware MemeberAuth

    <?php
    
    namespace AppHttpMiddleware;
    
    use Closure;
    use IlluminateSupportFacadesAuth;
    
    class MemeberAuth
    {
    	 /**
    	  * Handle an incoming request.
    	  *
    	  * @param IlluminateHttpRequest $request
    	  * @param Closure $next
    	  * @return mixed
    	  */
    	 public function handle($request, Closure $next, $guard = null)
    	 {
    	  	//如果没有指定的话,默认 guard 是 web,
    	  	//dump(Auth::guard($guard)->check()); 判断用户是否认证
    	  	//Auth::guard($guard)->user() 获取用户信息
    	  	//Auth::guard($guard)->guest() 是否是来宾
    	  	
    	 	if(Auth::guard($guard)->guest()){
    	 		if($request->ajax() || $request->wantsJson()){
    	 			return response('Unauthorized.', 401);
    	 		}else{
    	 			return redirect()->guest('admin/login');
    	 		}
     		
    
      			return $next($request);
     		}
    	}
    }
    

    laravel更改默认的登录密码加密方式

    laravel 默认用的登录密码加密方式是:

    $password = Hash::make('password');
    

    而我平时用的密码加密方式是:

    $password = md5('password');
    

    修改:

    1.首先,打开这个文件夹:/vender/laravel/framework/src/illuminate/Auth

    2.打开 EloquentUserProvider.php文件,将validateCredentials这个方法里的内容改成这样的:

    public function validateCredentials(UserInterface $user, array $credentials)
    {
          $plain = $credentials['password'];
          $authPassword = $user->getAuthPassword();
          return $authPassword === md5($plain);
    }
    

    这样就ok了、可以使用laravel的验证方法验证,最后推荐使用laravel的HASh加密方式更加安全。MD5毕竟是可以破解的

    修改laravel中默认Auth的password和name字段

    如果想用username代替name,你可以重写username()方法在你的LoginController.php中:

    public  function  username(){
    	return 'username';
    }
    

    同样的, 如果想用passwd代替password,可以写一个存取器,在你的AppUser.php

    public function getAuthPassword(){
    	return $this->passwd;
    }
    

    在绑定用户表的模型中,重写 getAuthPassword() 方法,而在 attempt 方法中照常使用 password 就可以。

    Auth::guard('member')->attempt(['username'=>'13','password'=>'123456']);
    
  • 相关阅读:
    洛谷P1265 公路修建(Prim)
    洛谷P1144 最短路计数(SPFA)
    洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )
    洛谷P2879 [USACO07JAN]区间统计Tallest Cow
    洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
    洛谷P2105 K皇后
    洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
    洛谷P2982 [USACO10FEB]慢下来Slowing down(线段树 DFS序 区间增减 单点查询)
    洛谷P1784 数独
    洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
  • 原文地址:https://www.cnblogs.com/caibaotimes/p/14482312.html
Copyright © 2020-2023  润新知