2016-11-28 8 views
1

タイトルが言ったように、VendorControllerpostLoginメソッドdd(Auth::user())の値を取得しますが、$attemptの結果はtrueとなり、試行されたデータは取得できません。Laravel 5.3はtrueを試行しますが、Auth :: Userがnullを返しますか?

マイ

Route::group(['prefix' => 'vendor','as' => 'Vendor.'], function() { 
     Route::get('login', '[email protected]')->name('Login'); 
     Route::post('login', '[email protected]')->name('Post.Login'); 
}); 

routes/web.phpマイ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

関連する問題