在不登录的情况下验证电子邮件地址 Laravel 8 (Sanctum)
Verify email address without being logged in Laravel 8 (Sanctum)
我想允许用户在不登录的情况下验证电子邮件地址。
当用户注册时,他会得到一个验证link。如果他点击它,他就会得到验证并自动登录,因为他在注册时就已经登录了。但是如果用户使用不同的设备来验证,比如说智能手机,他无法直接验证电子邮件,因为他没有登录。我如何更改我的控制器才能做到这一点?
这是我的控制器:
use Illuminate\Foundation\Auth\EmailVerificationRequest;
public function verify(EmailVerificationRequest $request)
{
if ($request->user()->hasVerifiedEmail()) {
return [
'message' => 'Email already verified'
];
}
if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return [
'message' => 'Email has been verified'
//then front-end redirects user to login page
];
}
这是API:
Route::get('verify-email/{id}/{hash}', [EmailVerificationController::class, 'verify'])->name('verification.verify')->middleware('auth:sanctum');
如果我删除 middleware('auth:sanctum');
我会得到 Call to a member function getKey() on null.
谢谢!
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
}
我想允许用户在不登录的情况下验证电子邮件地址。
当用户注册时,他会得到一个验证link。如果他点击它,他就会得到验证并自动登录,因为他在注册时就已经登录了。但是如果用户使用不同的设备来验证,比如说智能手机,他无法直接验证电子邮件,因为他没有登录。我如何更改我的控制器才能做到这一点?
这是我的控制器:
use Illuminate\Foundation\Auth\EmailVerificationRequest;
public function verify(EmailVerificationRequest $request)
{
if ($request->user()->hasVerifiedEmail()) {
return [
'message' => 'Email already verified'
];
}
if ($request->user()->markEmailAsVerified()) {
event(new Verified($request->user()));
}
return [
'message' => 'Email has been verified'
//then front-end redirects user to login page
];
}
这是API:
Route::get('verify-email/{id}/{hash}', [EmailVerificationController::class, 'verify'])->name('verification.verify')->middleware('auth:sanctum');
如果我删除 middleware('auth:sanctum');
我会得到 Call to a member function getKey() on null.
谢谢!
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
}