2016-11-28 132 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

相关问题