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' => App\Models\User::class,
    ],
    //
    'member' => [
        'driver' => 'eloquent',
        'model' => App\Models\Member::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 App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class MemeberAuth
{
	 /**
	  * Handle an incoming request.
	  *
	  * @param \Illuminate\Http\Request $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,可以写一个存取器,在你的App\User.php

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

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

Auth::guard('member')->attempt(['username'=>'13','password'=>'123456']);
posted @ 2021-03-04 18:38  caibaotimes  阅读(2257)  评论(0编辑  收藏  举报