如何解决使用 Sanctum 的 Laravel 8 API 电子邮件验证流程 对来自浏览器的用户进行定期电子邮件验证来自移动应用的移动用户
我目前正在为移动应用程序制作 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
}
这里有安全隐患吗?我应该在用户单击链接之前还是之后对其进行身份验证? 我想尽可能避免渲染“网络视图”。
解决方法
我认为最好的方法是根据用户的来源实现两种不同的路径。
对来自浏览器的用户进行定期电子邮件验证
用户只需点击通过电子邮件发送的链接,您可以使用或不使用身份验证(可能使用透明 cookie 身份验证)来执行此操作。如果验证通过,则将它们重定向回主页。
来自移动应用的移动用户
我会通过电子邮件发送 PIN 码(具有某种过期机制),并要求他们将其放入 APP 以验证帐户。这甚至可以通过身份验证中间件使用 JWT 令牌和验证 API 调用来保护。
我没有看到最后一个有任何安全问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。