Обычно я пытаюсь отправить по электронной почте ссылку, которая позволяет войти в систему с определенной учетной записью, а затем перенаправляет вас на страницу.
Я могу безопасно создать ссылку и отправить ее по электронной почте, используя функции URL в laravel, используя этот код:
Генерация ссылки:
$url = "some/page/".$travel_id;
$link = URL::temporarySignedRoute(
'autologin', now()->addDay(), [
'user_id' => 3,
'url_redirect' => $url,
]
);
И отправка почты:
Mail::send('emails.travel', $data, function ($message) use ($data) {
$message->from('mail@mail.com', 'blablabla');
$message->to('reciever@mail.com', 'blablabla')->subject('test');
});
Существует маршрут, который перехватывает ссылку, отправленную по почте, которая должна войти в систему с пользователем (в данном случае, с идентификатором '3') и перенаправить вас на какую-то страницу, но когда она перенаправляет, она предложит вам перейти на страницу входа, как будто вы не вошли в систему.
Вот маршрут:
Route::get('/autologin', function (Request $request) {
$user = User::findOrFail($request->user_id);
if (! $request->hasValidSignature()) {
abort(403);
}
Auth::login($user);
return redirect($request->input('url_redirect'));
})->name('autologin');
Когда я пытаюсь сделать Auth::check()
после Auth::login($user);
, он возвращает true, так что пользователь вошел в систему?
Я также пытался использовать Auth::loginUsingId($request->user_id);
без каких-либо других результатов.
Есть идеи о том, что происходит?