2016-11-28 134 views
1

如題目所述,在VendorControllerpostLogin方法dd(Auth::user())得到的值爲null,但$attempt得到結果true,我無法獲得已經嘗試的數據。Laravel 5.3獲得嘗試true但Auth :: User返回null?

routes/web.php

Route::group(['prefix' => 'vendor','as' => 'Vendor.'], function() { 
     Route::get('login', '[email protected]')->name('Login'); 
     Route::post('login', '[email protected]')->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, 
     ], 
    ], 

]; 

回答

4

由於您使用的是自定義的驅動程序並沒有使用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()); 
} 

通過這樣做,您將驅動程序設置爲使用供應商。

+0

當使用非默認警衛使用Laravel multi-auth時,這非常重要。似乎奇怪的是,它會允許警衛特定的身份驗證,但實際上並沒有在登錄後將用戶設置爲身份驗證實例(這可能是一個很好的理由,超出我目前的理解水平)。 花了我一會兒才找到這個。謝謝! – bfuzze

相關問題