Axios паспорта Laravel 5.4 всегда возвращает без проверки подлинности

Я следовал руководству здесь: https://laravel.com/docs/5.4/passport#consuming-your-api-with-javascript.

Использование аксиомов:

...
mounted: function() {

            axios.get('/api/user')
                .then(function (response) {
                    console.log(response)
                })
                .catch(function (response) {
                    console.error(response);
                });
        },

Но ответ всегда не аутентифицируется, я проверяю, присутствует ли cookie laravel_token, и это:

введите описание изображения здесь

Я работаю на apache2 (докер)

---- Обновлять --

После отладки это фактически токен xsrf, который не работает в этом методе в TokenGuard:

/**
     * Authenticate the incoming request via the token cookie.
     *
     * @param  Request  $request
     * @return mixed
     */
    protected function authenticateViaCookie($request)
    {

        try {
            $token = $this->decodeJwtTokenCookie($request);
        } catch (Exception $e) {
            return;
        }

        # This is not passing:
        if (! $this->validCsrf($token, $request) ||
            time() >= $token['expiry']) {
            return;
        }


        if ($user = $this->provider->retrieveById($token['sub'])) {
            return $user->withAccessToken(new TransientToken);
        }
    }

У меня есть соответствующая настройка в boostrap.js:

window.axios = require('axios');

window.axios.defaults.headers.common = {
    'X-Requested-With': 'XMLHttpRequest'
};

person Angad Dubey    schedule 03.02.2017    source источник
comment
У меня был аналогичный вопрос. Посмотрите, сможете ли вы найти ответ stackoverflow.com/questions/ 39228194 /   -  person Rikard Olsson    schedule 03.02.2017
comment
@RikardOlsson обновлен   -  person Angad Dubey    schedule 03.02.2017


Ответы (1)


На самом деле это проблема Laravel / документации.

Страж паспорта жетона ищет X-CSRF-TOKEN, но axios отправляет X-XSRF-TOKEN. Измените конфигурацию вашей Axios на:

window.axios.defaults.headers.common = {
  'X-CSRF-TOKEN': window.Laravel.csrfToken,
  'X-Requested-With': 'XMLHttpRequest'
};

Я открыл PR, и это должно быть по умолчанию в будущих версиях Laravel.

person Michael    schedule 03.02.2017
comment
Где window.Laravel.csrfToken? - person user3098538; 21.02.2017
comment
@ user3098538 он должен быть в вашем представлении /resources/views/layouts/app.blade.php внутри тега head. - person marcovega; 01.03.2017