Всякий раз, когда я использую посещение URL, созданного с помощью temporarySignedRoute()
на production , выдается InvalidSignatureException
. Однако в среде dev это работает. Я также попытался использовать signedRoute()
без удачи.
Я создаю свои URL-адреса следующим образом:
\URL::temporarySignedRoute(
'user.activate',
now()->addHours(200),
[ 'id' => $user->id ]
);
Пример URL: https://xx.xx/activate/5?expires=1537065074&signature=f57713b2fccea5ce17b7c1a3241e275d62f1994cd8004ea480cced2402081090
Я убедился, что APP_KEY
установлен. Я не совсем уверен, какой шаг я должен сделать, чтобы это исправить. Я использую Laravel Forge для развертывания. Я также использую балансировщик нагрузки, но только один сервер приложений atm.
Почему temporarySignedRoute()
выбрасывает InvalidSignatureException
в производство?
Edit:
Регистрируя запрос, я получаю следующие данные:
// [ $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?