問題描述
新建使用者表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方法認證。
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()一樣獲取不到資料。
我另外又寫了一遍程式碼,結果把config/Auth.php裡的default裡面的web修改為admin,
原來認證程式碼:Auth::guard(‘admin’)->attempt([]);
修改為:Auth::attempt([]);,因為把config/Auth.php裡的default設定預設為admin了,這裡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 協議》,轉載必須註明作者和本文連結