TLDR:我是 Laravel 的新手,但我正在嘗試通過 request->input('email') 將驗證電子郵件重新發送到電子郵件地址。
案子:
[作業中] 當用戶注冊時,我通過 Laravel 默認的電子郵件驗證腳手架向注冊用戶發送一封電子郵件。在用戶可以使用該平臺之前,需要對其進行驗證。用戶收到一封電子郵件,可以單擊電子郵件中的按鈕來驗證其帳戶。
[不作業] 但是如果用戶由于某種原因丟失了他/她的驗證電子郵件,我想通過 API 呼叫重新發送它,同時檢查(但不公開)填寫的電子郵件是否可用。Laravel 電子郵件驗證腳手架默認不支持此功能。
我做了什么:
在用戶模型中添加:
implements MustVerifyEmail使用use Illuminate\Contracts\Auth\MustVerifyEmail;在默認的 VerificationController 我更改
$this->middleware('auth')為:$this->middleware('auth')->except(['resend']);在 api.php 中添加了兩個路由到自定義的 VerifyEmailController 類
Route::group(['middleware' => ['signed', 'throttle:6,1']], function () { Route::get('/email/verify/{id}/{hash}', [VerifyEmailController::class, '__invoke'])->name('verification.verify'); });[這有效]Route::group(['middleware' => ['throttle:6,1']], function () { Route::post('/email/verify/resend', [VerifyEmailController::class, 'resend'])->name('verification.resend');});[呼叫有效但重發方法邏輯錯誤]
這是我的 VerifyEmailController 類重新發送方法

當然這不是它的完成方式,但由于我缺乏知識和經驗,我想不出一種方法來完成這項作業。
現在我確實收到了一個 json 回應,它已經發送了電子郵件,但顯然它沒有觸發驗證事件來實際發送請求中的驗證電子郵件。

如果您想要更多代碼截圖,請告訴我。
Wael Khalifa的解決方案:
在 api.php 我宣告了以下路線
Route::group(['middleware' => ['throttle:6,1']], function () {
Route::post('/email/verify/resend', [VerifyEmailController::class, 'resend'])->name('verification.resend');});
在 VerifyEmailController 類中,宣告了以下方法
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);
}
}
uj5u.com熱心網友回復:
之后使用 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');
如果您需要幫助向我添加評論,您可以在控制器中執行相同的操作
希望回答對你有幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/436917.html
