Всякий раз, когда я использую URL-адрес, созданный с помощью temporarySignedRoute() на производство, он выдает InvalidSignatureException. Однако в среде разработчик это работает. Я также безуспешно пытался использовать signedRoute().
Я создаю свои URL-адреса следующим образом:
\URL::temporarySignedRoute(
'user.activate',
now()->addHours(200),
[ 'id' => $user->id ]
);
Я убедился, что APP_KEY настроен. Я не совсем уверен, что мне нужно сделать, чтобы это исправить. Я использую Laravel Forge для развертывания. Я также использую балансировщик нагрузки, но только один банкомат сервера приложений.
Why is
temporarySignedRoute()throwingInvalidSignatureExceptionin production?
Редактировать:
Регистрируя запрос, я получаю следующие данные:
// [ $expired, $url, $query, $original, $signature ]
[
false,
"http://xx.xx/activate/13",{"expires":"1537076308","signature":"9d972a574137bf7e5f30120c3f539a81bca71875020c3476e3bfb230220a73f7"},
"http://xx.xx/activate/13?expires=1537076308",
"ed80a6ae717e806fd5f887224c2ac88f5fffb893ae284cc52688ba0690d3a9e1"
]
Обратите внимание, что URL-адрес начинается с http://, но фактическая сгенерированная ссылка использует https://. URL регистрируется с помощью request()->url(). Это наводит меня на мысль, что проблема кроется в http-схеме.
В моем AppServiceProvider.php я использую https следующим образом:
if (env('APP_ENV') == 'production') {
\URL::forceScheme('https');
}
Почему request() принимает его как не-http?
Да, выполнение date возвращает Fri Sep 7 21:16:28 UTC 2018. Но дата на самом деле не имеет значения, правда?
Я добавил некоторую отладочную информацию, если вы хотите взглянуть.






Это было вызвано тем, что мой балансировщик нагрузки не отправлял HTTPS-вызовы на сервер. Это означает, что сервер хеширует другую схему URL (http), чем исходную (https).
Я столкнулся с той же проблемой, и ответ Фредрика помог.
Когда я сбросил запрос при генерации подписанного URL-адреса, я увидел, что мой сервер запрашивал с «http», а не с «https», хотя сайт обслуживался по «https». Мне пришлось изменить настройки Cloudflare, чтобы принудительно использовать https для запросов ...
Предположительно время на вашем рабочем сервере установлено правильно?