Почему пользовательская защита выходит из системы при перезагрузке / перенаправлении страницы?

#laravel #laravel-authentication #laravel-session #laravel-guard

#laravel #laravel-аутентификация #laravel-сессия #laravel-guard

Вопрос:

Я создал новую защиту для входа в пользовательский тип пользователей. Я могу регистрировать пользователей с помощью Auth::attempt('webguest') , но логин не сохраняется при перезагрузке страницы. Это работает только тогда, когда я использую web -guard. Смотрите, например, мои два тестовых маршрута:

 
Route::get('test1', function () {
    Auth::guard('webguest')->attempt([ 
        'id' => 5,
        'password' => 2222
    ]);

    // here dump(Auth::guard('webguest')->check()) shows true

    return Redirect::to('/test2');
});

Route::get('test2', function () {
    return Auth::guard('webguest')->check() ? "guest account logged in" : "guest not logged in";
   
   // dumps not logged in

});
  

Моя пользовательская защита:

config/auth.php

 'guards' => [

    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'webguest' => [
        'driver' => 'session',
        'provider' => 'guests'
    ],

],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => AppModelsUser::class,
    ],

    'guests' => [
        'driver' => 'eloquent',
        'model' => AppModelsGuest::class
    ],
]
  

Расширяются как гостевая, так и пользовательская модели IlluminateFoundationAuthUser as Authenticatable .

Как я могу сделать так, чтобы вход в систему с пользовательской защитой сохранялся, как с web guard?

Ответ №1:

Я нашел основную причину. В моей гостевой модели «имя пользователя», используемое для входа, является идентификатором, и в модели был переопределенный метод:

  public function getAuthIdentifier() {
            return $this->user->getKey();
 }

  

Я удалил ее и добавил вместо нее следующее:

  public function getAuthIdentifierName()
    {
        return 'id';
    }

  

Теперь пользовательская защита работает как шарм.