Laravel邮箱验证(重发方式)

Laravel E-mail verification (re-send method)

TLDR:我是 Laravel 的新手,但我正在尝试通过请求将验证电子邮件重新发送到电子邮件地址->输入('email').

案例:

[工作] 当用户注册时,我会通过 Laravel 的默认电子邮件验证脚手架向注册用户发送一封电子邮件。在用户可以使用该平台之前,需要对其进行验证。用户收到一封电子邮件,可以单击电子邮件中的按钮来验证其帐户。

[不工作] 但是,如果用户由于某种原因丢失了 his/her 验证电子邮件,我想通过 API 调用重新发送它,同时检查(但不公开)电子邮件是否可用。默认情况下,Laravels 电子邮件验证脚手架不支持此功能。

我做了什么:

当然不是这样做的,但由于我缺乏知识和经验,我想不出办法来完成这项工作。

现在我确实收到了 json 回复,它已经发送了电子邮件,但显然它还没有触发 Verify 事件来实际发送请求中的验证电子邮件。

如果您想要更多代码截图,请告诉我。

解决方案来自 :

在api.php中我声明了以下路线

Route::group(['middleware' => ['throttle:6,1']], function () {
Route::post('/email/verify/resend', [VerifyEmailController::class, 'resend'])->name('verification.resend');});

在 VerifyEmailController class 中,声明了以下方法

class VerifyEmailController extends Controller
{

    public function resend(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email|max:45',
        ]);
        
        // These two lines below where the solution to my problem.
        $user = User::where('email', $request->input('email'))->first();
        $user->sendEmailVerificationNotification();

        return Response::json(["status" => 'Verification e-mail send.', "email" => $request->input('email')], 201);
    }
}

使用 sendEmailVerificationNotification() 方法重新发送验证邮件后,从您的数据库中获取用户

 Route::post('resend/verification-email', function (\Illuminate\Http\Request $request) {
$user = User::where('email',$request->input('email'))->first();

    $user->sendEmailVerificationNotification();

    return 'your response';
})->middleware('throttle:6,1');

如果你需要帮助,你可以在你的控制器中做同样的事情给我添加评论

希望回答对您有所帮助