在不登录的情况下验证电子邮件地址 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
}