Подписание маршрута PHP laravel не работает в почтальоне?Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Подписание маршрута PHP laravel не работает в почтальоне?

Сообщение Гость »


Версия Laravel: 10.10

Привет, я использую леса laravel Breeze для аутентификации пользователя. Система проверки электронной почты Laravel Breeze по умолчанию регистрирует пользователя и входит в систему, затем пользователь может проверить свою электронную почту, но моему приложению необходимо проверить электронную почту, а затем аутентифицировать пользователя. Я создал новую базу данных, которая содержит непроверенные пользователи и в основном похожие столбцы, которые есть у пользователя моего приложения.

Schema::create('unverified_users', function (Blueprint $table) { $таблица->id(); $table->string('имя'); $table->string('фамилия', 30); $table->string('электронная почта'); $table->enum('role', ['member', 'admin'])->default('member'); $table->string('телефон', 20)->nullable(false); //$table->timestamp('email_verified_at')->nullable(); $table->string('пароль'); //$table->rememberToken(); $таблица->временные метки(); }); Я изменил некоторые классы формирования шаблонов и переопределил некоторые методы для работы этой логики, и в конечном итоге все работает так, как задумано.
Метод регистрации пользователя
хранилище общедоступных функций (Запрос $request): Ответ { $request->проверить([ 'name' => ['обязательный', 'строка', 'макс.:255'], 'фамилия' => ['обязательно', 'строка', 'макс.:255'], 'телефон' => ['обязательно', 'строка', 'макс.: 255'], 'email' => ['обязательный', 'строка', 'строчные буквы', 'email', 'max:255', 'unique:'.User::class], 'пароль' => ['требуется', 'подтверждено', Правила\Пароль::defaults()], ]); /** @var UnverifiedUsers $user */ $user = UnverifiedUsers::create($request->all()); событие (новый зарегистрированный ($ пользователь)); $user->sendEmailVerificationNotification(); //отправляет электронное письмо вернуть ответ()->noContent(); } Метод проверки электронной почты пользователя публичная функция __invoke(Request $request): RedirectResponse { $requestUserId = $request->route('id'); $unverifiedUser = UnverifiedUsers::find($requestUserId); //TODO: вернуть более приятное сообщение если(! $unverifiedUser){ выдать новое исключение AuthorizationException; } if (! hash_equals((string) $unverifiedUser->id, (string) $requestUserId)) { выдать новое исключение AuthorizationException; } if (! hash_equals(sha1($unverifiedUser->getEmailForVerification()), (строка) $request->route('hash'))) { выдать новое исключение AuthorizationException; } UnverifiedUsers::where('email', $unverifiedUser->email)->delete(); $user = новый пользователь([ 'имя' => $unverifiedUser->имя, 'фамилия'=> $unverifiedUser->фамилия, 'email'=> $unverifiedUser->электронная почта, 'телефон' => $unverifiedUser->телефон, ]); $user->пароль = $unverifiedUser->пароль; $пользователь->сохранить(); если ($user->markEmailAsVerified()) { событие (новый проверенный ($ запрос-> пользователь ())); } return redirect()->away(config('app.frontend_url').RouteServiceProvider::HOME.'?verified=1'); } и, конечно же, необходимое промежуточное ПО для проверки электронной почты

//маршрут, который проверяет URL для проверки электронной почты Route::get('/verify-email/{id}/{hash}', VerifyEmailController::class) ->middleware(['signed', 'throttle:6,1']) //здесь подписанное промежуточное ПО ->name('verification.verify'); Основная проблема (или это не проблема) заключается в том, что когда я отправляю URL-адрес для проверки электронной почты пользователю, если пользователь использует то же устройство, которое создало серверную часть для отправки электронной почты, тогда, когда пользователь делает запрос на получение, используя URL-адрес проверки, проблем не возникает. но всякий раз, когда я использую браузер для отправки электронной почты и использую почтальона для проверки URL-адреса, я получаю неверную ошибку подписи. ПОЧЕМУ?

Я немного обнаружил исходный код и обнаружил, что ValidateSignature, который является промежуточным программным обеспечением по умолчанию в laravel, которое обрабатывает подписи маршрутов, обрабатывает подписи следующим образом:

дескриптор публичной функции ($request, Closure $next, ...$args) { [$relative, $ignore] = $this->parseArguments($args); if ($request->hasValidSignatureWhileIgnoring($ignore, ! $relative)) { вернуть $next($request); } создать новое исключение InvalidSignatureException; } Это именно тот момент, когда я получаю ошибку «Неверная подпись». Когда я проверяю метод hasValidSignatureWhileIgnoring:

Request::macro('hasValidSignatureWhileIgnoring', function ($ignoreQuery = [], $absolute = true) { URL возврата::hasValidSignature($this, $absolute, $ignoreQuery); }); Похоже, что это макрос и этот код находится в FoundationServiceProvider.php. И что здесь происходит? когда я просматриваю подписанный маршрут, я вижу, что он просто использует ключ приложения для создания подписанных маршрутов, я никогда не видел, чтобы он использовал сеанс или что-то подобное.

РЕДАКТИРОВАТЬ:

Я проверил URL-адрес подтверждения в другом браузере, и он работал нормально. Похоже, в почтальоне возникла проблема.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Получить параметры URL-адреса из маршрута без указания маршрута @page - Blazor
    Anonymous » » в форуме C#
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Префикс маршрута против маршрута
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как получить доступ к параметрам маршрута дочернего маршрута из родительских маршрутов в Route Next.js App Router?
    Anonymous » » в форуме Javascript
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Сжатая строка в Java распаковывается в тарабарщину в почтальоне
    Гость » » в форуме JAVA
    0 Ответы
    28 Просмотры
    Последнее сообщение Гость
  • Невозможно получить доступ к порту контейнера докеров на почтальоне
    Гость » » в форуме C#
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость

Вернуться в «Php»