В настоящее время я создаю API для мобильного приложения, но я думаю, что немного запутался в том, как должны работать проверка и аутентификация по электронной почте. Я пытаюсь реализовать следующий поток:
- Пользователь регистрируется в мобильном приложении и оно отправляет запрос в API
- Laravel создает пользователя и отправляет электронное письмо
- Пользователь получает электронное письмо и нажимает на ссылку
- Laravel проверяет пользователя и перенаправляет его в мобильное приложение по глубокой ссылке.
Однако, когда пользователь щелкает ссылку электронной почты, отображается ошибка «Маршрут не определен». Что имеет смысл, потому что пользователь в это время не аутентифицирован. Но я понимаю это неправильно?
Должен ли я аутентифицировать пользователя перед отправкой электронного письма? И будет ли это работать, учитывая, что мы используем Sanctum, а не обычную аутентификацию?
В настоящее время это то, что я делаю:
// web.php
Route::get('/email/verify/{id}/{hash}', [EmailVerificationController::class, 'verify'])
->middleware('signed') //note that I don't use the auth or auth:sanctum middlewares
->name('verification.verify');
// EmailVerificationController.php
public function verify(Request $request)
{
$user = User::findOrFail($request->id);
if ($user->email_verified_at) {
return '';
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
return redirect()->away('app://open'); // The deep link
}
Есть ли здесь угроза безопасности? Должен ли я в любой момент аутентифицировать пользователя до или после перехода по ссылке? Я хотел максимально избежать рендеринга веб-представлений.