我想知道我是否可以使用签名URL进行Magic Link登录(无密码)。我知道人们正在使用存储在数据库中的令牌,以后再比较每个令牌所属的令牌以及是否仍然有效。
/** * Get the verification URL for the given notifiable. * * @param \App\User $user * @return string */ protected function authenticationUrl(User $user): string { return URL::temporarySignedRoute( 'login.magic_link.authenticate', now()->addMinutes(10), ['uuid' => $user->uuid] ); }
我正在使用Laravel提供的签名URL将链接发送到我的应用程序。而且,如果用户单击链接,他将被重定向到authenticate方法。
/** * Authenticate validated user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\View\View * @throws \Illuminate\Database\Eloquent\ModelNotFoundException */ public function authenticate(Request $request): RedirectResponse { try { $user = User::where($request->only('uuid'))->firstOrFail(); } catch (ModelNotFoundException $e) { return redirect()->route('login.magic_link.index') ->withErrors(['email' => 'Email address could not be found.']); } Auth::login($user); return redirect()->route($this->redirectTo); }
问题是这是否安全并且被认为是一种好习惯。如果不好的话,有人可以向我解释原因吗?