簡體   English   中英

Laravel 5.3獲取嘗試為true,但Auth :: User返回null嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM