Множественная проверка электронной почты Laravel (Breeze)
В моей программе в настоящее время есть две модели, которые имеют аутентификацию и требуют подтверждения по электронной почте. Я выполнил аутентификацию, но теперь пытаюсь завершить процесс проверки электронной почты и терплю неудачу.
Моя единственная модель, называемая пользователями, должна быть проверена без входа в серверную часть. Этого я добился, удалив его из промежуточного программного обеспечения auth и внося некоторые изменения в контроллер. Вторая модель называется владельцами, и им нужно будет проверить свою электронную почту в качестве способа входа по умолчанию. Ничего не нужно менять. Однако, согласно документам Laravel, у вас должен быть маршрут с именем «verify.verify».
Поскольку у меня есть два маршрута с именем «verify.verify», он не работает должным образом. Я пришел к выводу, что у меня есть два варианта. Один из них - каким-то образом иметь один под названием «verify.userVerify», а другой - «verify.ownerVerify». Я предполагаю, что тогда мне нужно будет изменить некоторые файлы поставщика, что является большим запретом. Другой вариант - написать собственную систему проверки электронной почты только для модели пользователя?
Возможно, есть другой метод, который мне не хватает, или лучший способ сделать это. Любые советы будут оценены. Мой код ниже.
Маршруты
// Verify user email address without authentication.
Route::get('/verify-email/{id}/{hash}', VerifyUserEmailController::class)
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
Route::middleware(['auth:owner'])->group(function () {
Route::get('/verify-email', EmailVerificationPromptController::class)
->name('verification.notice');
Route::get('/verify-email/owner/{id}/{hash}', VerifyEmailController::class)
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
Route::post('/email/verification-notification', EmailVerificationNotificationController::class)
->middleware('throttle:6,1')
->name('verification.send');
});
VerifyUserEmailController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\RedirectResponse;
use App\Models\User;
class VerifyUserEmailController extends Controller
{
public function __invoke(Request $request): RedirectResponse
{
error_log($request);
$user = User::find($request->route('id'));
if ($user->hasVerifiedEmail()) {
return redirect('https://google.com');
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
return redirect('http://google.com');
}
}
VerifyEmailController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Verified;
use Illuminate\Foundation\Auth\EmailVerificationRequest;
use Illuminate\Support\Facades\Auth;
class VerifyEmailController extends Controller
{
/**
* Mark the authenticated owners's email address as verified.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function __invoke(EmailVerificationRequest $request)
{
if (Auth::user()->hasVerifiedEmail()) {
return redirect()->intended(RouteServiceProvider::HOME);
}
if (Auth::user()->markEmailAsVerified()) {
event(new Verified(Auth::user()));
}
return redirect()->intended(RouteServiceProvider::HOME);
}
}