I created a new guard for logging in custom type of users. I can login users with Auth::attempt('webguest')
, but login does not persist over page reloads. It works only when I use web
-guard. See for example my two test routes:
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
});
My custom guard:
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'webguest' => [
'driver' => 'session',
'provider' => 'guests'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'guests' => [
'driver' => 'eloquent',
'model' => App\Models\Guest::class
],
]
Both Guest and User models extend Illuminate\Foundation\Auth\User as Authenticatable
.
How can I make login with the custom guard persist like with web
guard?
I've found the root cause. In my Guest model the "username" used for login is the id, and there was an overriden method in the model:
I removed it and added the following instead:
Now the custom guard works like a charm.