Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
ну и дальше в контроллере VerificationController namespace App\Http\Controllers\Auth; в конструкторе меняем посредника
// $this->middleware('signed')->only('verify');
$this->middleware('customsigned')->only('verify');
и регистрируем его в Kernel namespace App\Http;
'customsigned' => \App\Http\Middleware\ValidateHttpsSignature::class,
решение временное пока не выясним что добавляет лишние поля в урл.
новый посредник выглядит так
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Routing\Exceptions\InvalidSignatureException;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
class ValidateHttpsSignature
{
var $keyResolver;
public function __construct()
{
$this->keyResolver = function () {
return App::make('config')->get('app.key');
};
}
/**
* gebaseerd op vendor/laravel/framework/src/Illuminate/Routing/Middleware/ValidateSignature.php
* maar zorgt er voor dat een url altijd als https behandeld wordt. dit fixt het feit dat
* laravel achter een rewrite proxy draait en urls binnenkrijgt als http.
*
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
Log::info('class ValidateHttpsSignature в методе handle');
Log::info($request);
if ($this->hasValidSignature($request)) {
return $next($request);
}
throw new InvalidSignatureException;
}
/**
* Determine if the given request has a valid signature.
* copied and modified from
* vendor/laravel/framework/src/Illuminate/Routing/UrlGenerator.php:363
* @param \Illuminate\Http\Request $request
* @param bool $absolute
* @return bool
*/
public function hasValidSignature(Request $request, $absolute = true)
{
$url = $absolute ? $request->url() : '/'.$request->path();
$url = str_replace("http://","https://", $url);
// $original = rtrim($url.'?'.Arr::query(
// Arr::except($request->query(), 'signature')
// ), '?');
$original = rtrim($url.'?expires='.$request->expires);
$expires = $request->query('expires');
$signature = hash_hmac('sha256', $original, call_user_func($this->keyResolver));
return hash_equals($signature, (string) $request->query('signature', '')) &&
! ($expires && Carbon::now()->getTimestamp() > $expires);
}
}
после изучения этой проблемы выяснилось что когда урл возвращается в приложение то туда добавляются некоторые поля /email/verify/1000017/969d08de8def0191793ac93159abcd46b8104a23?_url=%2Femail%2Fverify%2F1000017%2F969d05de8def0191793ac93159abcd46b5104a23&expires=1582806418
подчеркнул те данные которых не должно было быть...что бы все начало работать пришлось переопределить посредника , который отвечает за проверку валидности сингатуры...
я тоже столкнулся с проблемой при верификации почты, мне в приложение урл доходил немного видоизмененный, пришлось переопределить посредника, который отвечает за проверку валидности сингатуры, тоже костыльное решение но оно не затрагивает само ядро фреймворка...
то есть вы вместо дефолтного формирования урла в письме создали свой метод формирующий урл и с этим методом работает нормально?
При верификации электронной почты выскакивает ошибка 403 Invalid signature.
Все делал как описано в документации https://laravel.com/docs/6.x/verification , на почту приходит письмо со ссылкой https://www.mysite.fun/email/verify/100 … d511f788fd но при переходе по ссылке выскакивает указанная ошибка. Причем когда тестил локально то все работало, почта подтверждалась, а на хосте не работает.
а в чем была проблема? у меня тоже ошибка 403 Invalid signature.Причем на локальной машине все нормально, почта подтверждается ошибки нету, а на хосте есть...