middleware('auth')->except('verify'); $this->middleware('signed')->only('verify'); $this->middleware('throttle:1,1')->only('resend'); $this->middleware('throttle:6,1')->only('verify'); } /** * Show the email verification notice. * * @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View */ public function show(Request $request) { return $request->user()->hasVerifiedEmail() ? redirect($this->redirectPath()) : Inertia::render('Auth/Verify', ['flash' => $request->session()->get('resent', null) ? 'A fresh verification link has been sent to your email address.' : null]); } /** * Mark the authenticated user's email address as verified. * * @return \Illuminate\Http\Response * * @throws \Illuminate\Auth\Access\AuthorizationException */ public function verify(Request $request) { $verifiable = User::find($request->route('id')) ?? Recipient::withPending()->find($request->route('id')); if (is_null($verifiable)) { throw new AuthorizationException('Email address not found.'); } if (! hash_equals((string) $request->route('id'), (string) $verifiable->getKey())) { throw new AuthorizationException('Invalid hash.'); } if (! Hash::check($verifiable->getEmailForVerification(), (string) base64_decode($request->route('hash')))) { throw new AuthorizationException('Invalid hash.'); } if ($verifiable->hasVerifiedEmail()) { return redirect($this->redirectPath()); } if ($verifiable->markEmailAsVerified() && $verifiable instanceof User) { event(new Verified($verifiable)); } if ($request->user() !== null) { $redirect = $verifiable instanceof User ? $this->redirectPath() : route('recipients.index'); } else { $redirect = 'login'; } // Check if the verifiable is a pending new email Recipient if ($verifiable instanceof Recipient && $verifiable->pending) { try { DB::transaction(function () use ($verifiable) { $user = $verifiable->user; $defaultRecipient = $user->defaultRecipient; // Notify the current default recipient of the change $defaultRecipient->notify(new DefaultRecipientUpdated($verifiable->email)); // Set verifiable email as new default recipient $defaultRecipient->update([ 'email' => strtolower($verifiable->email), 'email_verified_at' => now(), ]); // Delete pending verifiable $verifiable->delete(); }); } catch (\Exception $e) { report($e); return redirect($redirect) ->with(['flash' => 'An error has occurred, please try again later.']); } } return redirect($redirect) ->with('verified', true) ->with(['flash' => 'Email Address Verified Successfully']); } }