Я недавно обновил свой проект от Laravel 5.6 до 5.7 и добавил шаги проверки электронной почты, описанные Laravel Docs, в мой проект.
Все отлично работает на моем машине разработки (который является HTTP), но когда я обновляю свой производственный сервер (который является HTTPS) со всем подпись, которую он создал. Побочный эффект - каждый раз, когда я щелкну кнопкой или вставляю ссылку в браузер, я получаю ошибку: < /p>
403 Извините, вам не разрешено получать доступ к этой странице.public function handle($request, Closure $next)
{
Log::info('checking signature');
if ($request->hasValidSignature()) {
Log::info('signature is valid');
return $next($request);
}
Log::info('throwing InvalidSignatureException');
throw new InvalidSignatureException;
}
< /code>
и, в частности, я проследил точную проблему внутри UrlGenerator.php Uniter.php
Я добавил журналы в следующем методе: < /p>
public function hasValidSignature(Request $request)
{
$original = rtrim($request->url().'?'.Arr::query(
Arr::except($request->query(), 'signature')
), '?');
$expires = Arr::get($request->query(), 'expires');
$signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver));
Log::info('url: '.$original);
Log::info('expire: '.$expires);
Log::info(' new signature: '.$signature);
Log::info('link signature: '.$request->query('signature', ''));
Log::info('hash equals: '.hash_equals($signature, $request->query('signature', '')));
Log::info('expired: '.!($expires && Carbon::now()->getTimestamp() > $expires));
return hash_equals($signature, $request->query('signature', '')) &&
! ($expires && Carbon::now()->getTimestamp() > $expires);
}
< /code>
Когда я нажимаю кнопку или вставлю ссылку в браузер и нажимаю Enter Я получаю следующие сообщения журнала:
(я изменил свой реальный домен по очевидным причинам .... не пытайтесь продавать мой сайт или что -то в этом роде) < /p>
checking signature
url: http://www.example.com/email/verify/2?e ... 1538012234
expire: 1538012234
new signature: 1326b9e7402a51e0f05ddf1cb14f1e14852b4c5f0d1d6e726554806e7d85b4b1
link signature: e1d3ad5dc88faa8d8b0e6890ef60e216b75d26ef7ed5c6ab1cc661548e0ad8df
hash equals:
expired: 1
throwing InvalidSignatureException
< /code>
Так что я не знаю, находится ли ошибка в логике, где Laravel создает начальную подпись или когда она пытается ее проверить.
Однако, как я уже говорил, отлично работает на моей машине разработки. Я очистил кэш, очищенные маршруты, обновленные до последнего кода, перезагруженный сервер, все, о чем я могу придумать.
Любая помощь будет высоко оценена.
Я не могу поверить, что я не видел этого прошлой ночью. Если мы внимательно посмотрим на выходные журналы, перечисленные выше сообщения о одном сообщении журнала < /p>
url: http://www.example.com/email/verify/2?e ... 1538012234
< /code>
показывает нам проблему. Так, как я уже говорил, моя машина разработки была http, но мой живой сервер - HTTPS. Я вижу сегодня утром (после хорошего 4 -часового сна), что журнал показывает нам, что логика в методе hasValidsignature () получает маршрут с HTTP вместо HTTPS. Поэтому, когда я возвращаюсь к своей электронной почте, ссылка в электронном письме - HTTPS, если я вставлю URL -адрес в свой браузер, у нее есть HTTPS, и в моем браузере после этой логики возвращает ошибку 403, которую браузер все еще показывает HTTPS. Я действительно борюсь здесь, потому что я понятия не имею, как этот URL -адрес обрабатывается с тех пор /электронная почта /проверка, даже не указан ни в одном из моих файлов маршрутов (о которых я знаю), и я не могу сказать, что я понимаю, что искать под капюшоном для этого, так что я действительно надеюсь на некоторую помощь здесь. < /P>
Также в моем файле.APP_USE_HTTPS=true
APP_URL=https://www.example.com
APP_ENV=production
< /code>
и в методе загрузки AppServiceProvider I есть < /p>
public function boot()
{
Schema::defaultStringLength(191);
if (env('APP_USE_HTTPS'))
{
Log::info('forcing URLs to use https');
\URL::forceScheme('https');
}
Подробнее здесь: https://stackoverflow.com/questions/525 ... validation
Подписанный маршрут для проверки электронной почты не проходит проверку подписи ⇐ Php
Кемеровские программисты php общаются здесь
1741707074
Anonymous
Я недавно обновил свой проект от Laravel 5.6 до 5.7 и добавил шаги проверки электронной почты, описанные Laravel Docs, в мой проект.
Все отлично работает на моем машине разработки (который является HTTP), но когда я обновляю свой производственный сервер (который является HTTPS) со всем подпись, которую он создал. Побочный эффект - каждый раз, когда я щелкну кнопкой или вставляю ссылку в браузер, я получаю ошибку: < /p>
403 Извините, вам не разрешено получать доступ к этой странице.public function handle($request, Closure $next)
{
Log::info('checking signature');
if ($request->hasValidSignature()) {
Log::info('signature is valid');
return $next($request);
}
Log::info('throwing InvalidSignatureException');
throw new InvalidSignatureException;
}
< /code>
и, в частности, я проследил точную проблему внутри UrlGenerator.php Uniter.php
Я добавил журналы в следующем методе: < /p>
public function hasValidSignature(Request $request)
{
$original = rtrim($request->url().'?'.Arr::query(
Arr::except($request->query(), 'signature')
), '?');
$expires = Arr::get($request->query(), 'expires');
$signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver));
Log::info('url: '.$original);
Log::info('expire: '.$expires);
Log::info(' new signature: '.$signature);
Log::info('link signature: '.$request->query('signature', ''));
Log::info('hash equals: '.hash_equals($signature, $request->query('signature', '')));
Log::info('expired: '.!($expires && Carbon::now()->getTimestamp() > $expires));
return hash_equals($signature, $request->query('signature', '')) &&
! ($expires && Carbon::now()->getTimestamp() > $expires);
}
< /code>
Когда я нажимаю кнопку или вставлю ссылку в браузер и нажимаю Enter Я получаю следующие сообщения журнала:
(я изменил свой реальный домен по очевидным причинам .... не пытайтесь продавать мой сайт или что -то в этом роде) < /p>
checking signature
url: http://www.example.com/email/verify/2?expires=1538012234
expire: 1538012234
new signature: 1326b9e7402a51e0f05ddf1cb14f1e14852b4c5f0d1d6e726554806e7d85b4b1
link signature: e1d3ad5dc88faa8d8b0e6890ef60e216b75d26ef7ed5c6ab1cc661548e0ad8df
hash equals:
expired: 1
throwing InvalidSignatureException
< /code>
Так что я не знаю, находится ли ошибка в логике, где Laravel создает начальную подпись или когда она пытается ее проверить.
Однако, как я уже говорил, отлично работает на моей машине разработки. Я очистил кэш, очищенные маршруты, обновленные до последнего кода, перезагруженный сервер, все, о чем я могу придумать.
Любая помощь будет высоко оценена.
Я не могу поверить, что я не видел этого прошлой ночью. Если мы внимательно посмотрим на выходные журналы, перечисленные выше сообщения о одном сообщении журнала < /p>
url: http://www.example.com/email/verify/2?expires=1538012234
< /code>
показывает нам проблему. Так, как я уже говорил, моя машина разработки была http, но мой живой сервер - HTTPS. Я вижу сегодня утром (после хорошего 4 -часового сна), что журнал показывает нам, что логика в методе hasValidsignature () получает маршрут с HTTP вместо HTTPS. Поэтому, когда я возвращаюсь к своей электронной почте, ссылка в электронном письме - HTTPS, если я вставлю URL -адрес в свой браузер, у нее есть HTTPS, и в моем браузере после этой логики возвращает ошибку 403, которую браузер все еще показывает HTTPS. Я действительно борюсь здесь, потому что я понятия не имею, как этот URL -адрес обрабатывается с тех пор /электронная почта /проверка, даже не указан ни в одном из моих файлов маршрутов (о которых я знаю), и я не могу сказать, что я понимаю, что искать под капюшоном для этого, так что я действительно надеюсь на некоторую помощь здесь. < /P>
Также в моем файле.APP_USE_HTTPS=true
APP_URL=https://www.example.com
APP_ENV=production
< /code>
и в методе загрузки AppServiceProvider I есть < /p>
public function boot()
{
Schema::defaultStringLength(191);
if (env('APP_USE_HTTPS'))
{
Log::info('forcing URLs to use https');
\URL::forceScheme('https');
}
Подробнее здесь: [url]https://stackoverflow.com/questions/52525958/signed-route-for-email-verification-does-not-pass-signature-validation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия