Laravel Signed Routes создает InvalidSignatureException в производстве - PullRequest
0 голосов
/ 08 сентября 2018

Всякий раз, когда я использую посещение 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?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Я столкнулся с той же проблемой, и ответ Фредрика помог.

Когда я выкинул запрос во время генерации подписанного URL-адреса, я увидел, что мой сервер запрашивает «http», а не «https», даже если сайт обслуживается через «https». Мне пришлось изменить настройки Cloudflare, чтобы заставить https запрашивать ...

0 голосов
/ 08 сентября 2018

Это было вызвано тем, что мой балансировщик нагрузки не отправлял HTTPS-вызовы на сервер. Это означает, что сервер хэшировал другую URL-схему (http), чем оригинал (https).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...