laravel 5.7 API-аутентификация (паспорт) не аутентифицирована - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь аутентифицировать вызовы API в моем приложении laravel 5.7. Я установил Passport, следуя документации, и думаю, что ничего не пропустил. Каждый вызов API возвращает 401 не прошедших проверку подлинности.

Отладка Я обнаружил, что проблема в том, что токен csrf, зашифрованный в cookie (после его расшифровки), не соответствует заголовку csrf из запроса. Я знаю это, потому что я выгружаю $this->validCsrf($token, $request) внутри getTokenViaCookie($request) метода в vendor / laravel / passport / src / Guards / TokenGuard.php и его значение равно false.

Я не могу думать, что я делаю неправильно.

В моем layout.blade.php я добавляю <meta name="csrf-token" content="{{ csrf_token() }}">

В Kernel.php Я добавляю \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class после \App\Http\Middleware\EncryptCookies::class

И в телескопе я вижу в запросе, что там есть заголовок x-xsrf-token и cookie laravel_token.

Приветствуется любая идея о том, в чем может быть проблема, или любой способ ее устранения.


Я глубже изучил код, я вижу, что токен, зашифрованный и сохраненный в cookie , кажется, является токеном сеанса . В паспорте / src / Http / Middleware / CreateFreshApiToken.php:

public function handle($request, Closure $next, $guard = null)
    {
        $this->guard = $guard;
        $response = $next($request);
        if ($this->shouldReceiveFreshToken($request, $response)) {
            $response->withCookie($this->cookieFactory->make(
                $request->user($this->guard)->getKey(), $request->session()->token()
            ));
        }
        return $response;
    }

Похоже, моя проблема в том, что зашифрованный токен является сессионным, затем сравнивается с заголовком csrf и, конечно, аутентификация не проходит.

Я удивляюсь, если это нормальное поведение и я что-то упускаю Или это неправильно?

1 Ответ

0 голосов
/ 23 января 2019

Я нашел, в чем проблема.

Поскольку я использую bootstrap-vue, я перестал использовать bootstrap. Чего я не понял, так это того, что в приложении vue , когда требуется ./bootstrap.js, оно не только загружает загрузчик, но и устанавливает некоторые заголовки.

...