新手慢慢學習中,把開發過程中遇到的問題及解決辦法記錄下來。
Laravel版本:Laravel5.7
首先在 config/auth.php 檔案中註冊相應的看守器 Guard 與服務提供者 providers
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin\AdminUser::class,
],
],
在路由中使用路由組Route::group()與路由中介軟體對使用者進行限制
Route::group(['middleware'=>'auth:admin'],function (){
//
});
然後在控制器中通過訪問指定的看守器例項來進行身份驗證
if (Auth::guard('admin')->attempt($data)) {
//
}
登出登入
Auth::guard('admin')->logout();
return redirect('/admin/login');
此時會出現問題,logout()預設會去資料庫中清除remember_token,但建立後臺資料表沒有建立remember_token欄位。解決辦法:在AdminUser.php模型檔案中重寫$rememberTokenName
屬性為空
protected $rememberTokenName = '';
更改未認證使用者直接通過get請求訪問後臺頁面時自動跳轉頁面路徑
預設的跳轉,是在App/Http/Middleware/Authenticate
redirectTo
方法中實現的:
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
更改預設跳轉刪掉上述的App/Http/Middleware/Authenticate redirectTo方法,在App/Exceptions/Handler中新增unauthenticated方法,通過AuthenticationException能拿到當前guard,通過判斷guard進行相應的跳轉:
……
use Illuminate\Auth\AuthenticationException;
……
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
//修改前後臺未登入跳轉頁面
if (in_array('admin',$exception->guards())){
return redirect('/admin/login');
}
return redirect()->guest(route('login'));
}