#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';
}
Теперь пользовательская защита работает как шарм.