Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.02.2020 10:51:32

Verify Email Address Laravel 6.0 ошибка 403 Invalid signature.

При верификации электронной почты выскакивает ошибка 403 Invalid signature.
Все делал как описано в документации https://laravel.com/docs/6.x/verification , на почту приходит письмо со ссылкой https://www.mysite.fun/email/verify/100 … d511f788fd но при переходе по ссылке выскакивает указанная ошибка. Причем когда тестил локально то все работало, почта подтверждалась, а на хосте  не работает.

Изменено Blag (27.02.2020 10:52:22)

Не в сети

#2 28.02.2020 10:54:48

Re: Verify Email Address Laravel 6.0 ошибка 403 Invalid signature.

после изучения этой проблемы выяснилось что когда урл возвращается в приложение то туда добавляются некоторые поля /email/verify/1000017/969d08de8def0191793ac93159abcd46b8104a23?_url=%2Femail%2Fverify%2F1000017%2F969d05de8def0191793ac93159abcd46b5104a23&expires=1582806418
подчеркнул те данные которых не должно было быть...что бы все начало работать пришлось переопределить посредника , который отвечает за проверку валидности сингатуры...

Не в сети

#3 28.02.2020 11:00:40

Re: Verify Email Address Laravel 6.0 ошибка 403 Invalid signature.

новый посредник выглядит так

<?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);

    }

}

Не в сети

#4 28.02.2020 11:05:56

Re: Verify Email Address Laravel 6.0 ошибка 403 Invalid signature.

ну и дальше в контроллере 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,

решение временное пока не выясним что добавляет лишние поля в урл.

Не в сети

Подвал раздела