如何解决Laravel Sanctum Vuejs 验证自动登录的电子邮件
我有一个带有 Sanctum 身份验证的 Laravel 7 API,VueJS (Nuxt SPA) 前端。注册(Laravel 身份验证脚手架)后,用户必须验证他们的电子邮件地址。通常 app+auth 工作正常,但我注意到以下是可能的:
- 用户注册帐号
- 用户收到一封带有验证 URL 的电子邮件并使用它,在前端 /verify-email/ 路由中使用 &expires= 和 &signature= 参数进行处理
- 在VueJS创建的方法中处理电子邮件验证(对Laravel Auth\VerificationController@verify API端点的axios GET请求)后,无论成功还是错误,用户都将被重定向到主页登录页面 this.$router.push(' /')
- 根据我对 Nuxt Auth 模块 (https://auth.nuxtjs.org/) 的配置,这会导致前端 /login/ 路由
- 这是关键步骤。重定向后,Vue 表现得好像我没有登录并强制用户从 http://localhost:3000/ 到 http://localhost:3000/login。但是,如果我完全刷新页面或转到地址栏中的 http://localhost:3000,访问者会突然通过身份验证并访问其帐户上的主页。这真的是它应该如何工作还是我的设置不正确? (用户在没有实际登录的情况下登录感觉有点狡猾)
我试图准确了解身份验证发生的位置。注册完成后但在验证电子邮件之前,在 /login/ 上有一个对标准用户端点 /api/user 的请求,并带有 403 响应。我认为这是正常的 Nuxt 身份验证模块行为。 我可以看到电子邮件验证 api 端点具有带有 Set-Cookie XSRF-token 和 session 的响应标头。应该有吗?
我的 VerificationController/verify 方法看起来像这样
class VerificationController extends Controller
{
use VerifiesEmails;
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function verify(Request $request)
{
if ($request->route('id') == $request->user()->getKey() &&
$request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return response()->json('Email verified.');
}
我的 Nuxt/Vue 验证电子邮件页面组件如下所示
export default {
auth: 'guest',created() {
this.$axios.get(this.$route.query.query)
.then(response => {
this.$router.push('/');
})
.catch(error => {
console.log(error);
this.$router.push('/');
})
}
}
Laravel web.php/auth 路由
Route::group(['prefix' => 'auth'],function(){
Auth::routes();
Route::get('email/verify/{id}','Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend','Auth\VerificationController@resend')->name('verification.resend');
});
我要么不希望用户登录(最好),要么在验证电子邮件后直接成功登录以明确用户已登录
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。