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']);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM