[英]Laravel 5.3 get attempt true but Auth::User return null?
如標題所述,在VendorController
postLogin
方法dd(Auth::user())
獲取值null,但是$attempt
獲取結果true
,但我無法獲取已嘗試的數據。
我的routes/web.php
Route::group(['prefix' => 'vendor','as' => 'Vendor.'], function () {
Route::get('login', 'VendorController@login')->name('Login');
Route::post('login', 'VendorController@postLogin')->name('Post.Login');
});
我的VendorController
:
public function postLogin(Request $request)
{
$attempt = Auth::guard('vendor')->attempt([
'acctId' => $request->acctId,
'password' => $request->password
]);
if($attempt){
dd(Auth::user());
}
}
我的Vendor
模型
namespace ACME\Entities;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Auth\Authenticatable as AuthenticableTrait;
class Vendor extends Model implements Authenticatable
{
use AuthenticableTrait;
protected $table = 'vendor';
protected $primaryKey = 'id';
public $timestamps = true;
protected $fillable = [
'acctId',
'password',
'active',
'remark'
];
protected $guarded = ['password'];
}
我的config/auth.php
return [
'defaults' => [
// 'guard' => 'web',
// 'passwords' => 'users',
'guard' => 'user',
'passwords' => 'users',
],
'guards' => [
// 'web' => [
// 'driver' => 'session',
// 'provider' => 'users',
// ],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'user' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'vendor' => [
'driver' => 'session',
'provider' => 'vendors',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => ACME\Entities\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => ACME\Entities\Admin::class,
],
'vendors' => [
'driver' => 'eloquent',
'model' => ACME\Entities\Vendor::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'email' => 'auth.emails.password',
'table' => 'user',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'email' => 'auth.emails.password',
'table' => 'admin',
'expire' => 60,
],
'vendors' => [
'provider' => 'vendors',
'email' => 'auth.emails.password',
'table' => 'vendor',
'expire' => 60,
],
],
];
因為您使用的是自定義驅動程序,並且沒有使用Auth::shouldUse()
定義方法需要使用哪個驅動程序,所以您需要像這樣調用經過身份驗證的用戶:
Auth::guard('vendor')->user()
在另一個解決方案中,您可以使用Auth::shouldUse()
方法。
public function postLogin(Request $request)
{
Auth::shouldUse('vendor');
if(! $attempt = Auth::attempt([
'acctId' => $request->acctId,
'password' => $request->password
])){
//handle error if there is not login
}
dd(Auth::user());
}
這樣,您可以將驅動程序設置為使用供應商。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.