開發筆記:手動搭建系統後臺-認證使用者

Neymar發表於2019-05-30

新手慢慢學習中,把開發過程中遇到的問題及解決辦法記錄下來。

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

相關文章