Laravel auth guard使用問題

kindiaing發表於2021-11-09

問題描述

新建使用者表managers,欄位username、password
控制器LoginController用來展示介面,IndexController用來展示後臺,登陸成跳轉至後臺首頁。

想用Laravel自帶的Auth認證,
1、auth認證前準備
config/Auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        //自定義新增,用來Auth::guard()指定
        'admin' => [
            'driver' => 'session',
            'provider' => 'managers',
        ],//自定義新增
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        //自定義新增內容,
        'managers' => [
            'driver' => 'eloquent',
            'model' => App\Manager::class,
        ],
    ],

2、模型Manager內編碼,exteds繼承系統自帶User

use Illuminate\Foundation\Auth\User;
class Manager extends User
{
    //入庫欄位黑名單
    protected $guarded = [];
    //軟刪除
    use SoftDeletes;
}

3、然後這邊登陸檢視裡提交到check方法認證。

Laravel auth guard使用問題

use Illuminate\Support\Facades\Auth;
public function check(Request $request){

        $bool =  Auth::guard('admin')->attempt(['username' => $request->post('username'),'password' => $request->post('password')]);
         dump($bool);
         dd(Auth::user());

    }

問題來了:
認證通過後,dump($bool),返回true認證成功,可是Auth::user()獲取不到使用者資料,嘗試助手函式auth()->user()一樣獲取不到資料。

Laravel auth guard使用問題

我另外又寫了一遍程式碼,結果把config/Auth.php裡的default裡面的web修改為admin,
原來認證程式碼:Auth::guard(‘admin’)->attempt([]);
修改為:Auth::attempt([]);,因為把config/Auth.php裡的default設定預設為admin了,這裡guard不用指定了。
結果就可以獲取到資料了。

Laravel auth guard使用問題

有哪位高手可以幫忙解釋說明下為什麼呀。非常感謝,
如果這樣預設的話前臺如果有個users表,就沒辦法認證了呀。
目前沒有論壇和百度沒搜到相關問題的解決方法。不知道是不是我搜尋的不對。搜尋的Auth::user()獲取資料為空。

最後附錄下gitee地址:git@gitee.com:seeding/company.git

簡短總結:Auth::guard(‘admin’)->attempt([…]);認證的時候Auth::user()獲取不到資料,但是把config/Auth.php裡的預設defaults裡的guard=>web,修改成guard=>admin,
再去認證Auth::attempt([…]),因為預設值設定成admin了,所以這裡不用指定guard,Auth::user()就能獲取到使用者資料了。對了,這兩種寫法都可以正常通過使用者驗證並返回true/false

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章