Laravel Vue SPA, использующий ответ Sanctum, не авторизован - PullRequest
0 голосов
/ 20 апреля 2020

Система Sanctum Auth на моей локальной машине работает хорошо, и у меня нет ошибок. Но у моего развернутого приложения возникают проблемы с авторизацией пользователя. Когда я вхожу в систему, он отправляет запрос на получение пользовательских данных, а затем перенаправляет. После завершения аутентификации вы будете перенаправлены, и приложение сделает запрос GET для получения дополнительных данных. Этот маршрут GET охраняется с помощью laravel sanctum. Но серверная часть не регистрирует, что пользователь сделал успешную попытку входа в систему, поэтому отправляет 401 Несанкционированную ошибку. Вот код ...

действие loadUser из хранилища. js

actions: {
    async loadUser({ commit, dispatch }) {
        if (isLoggedIn()) {
            try {
                const user = (await Axios.get('/user')).data;
                commit('setUser', user);
                commit('setLoggedIn', true);
            } catch (error) {
                dispatch('logout');
            }
        }
    },
}

Защита маршрута на маршрутах. js проверка на наличие isLoggedIn (это локальное логическое хранилище)

router.beforeEach((to, from, next) => {
    if (to.matched.some(record => record.meta.requiresAuth)) {
    // if (to.meta.requiresAuth) {
        if (isLoggedIn()) {
            next();
        } else {
            next({
                name: 'home'
            });
        }
    } else {
        next();
    }
})

Было отмечено, что я забыл настройку withCredetials для топора ios в bootstrap. js. Я сделал это дополнение, но моя проблема все еще остается.

window.axios = require('axios');

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.withCredentials = true;

Маршрутизатор промежуточного уровня на стороне сервера (это когда запрос отклоняется)

Route::middleware('auth:sanctum')->group(function () {
    Route::apiResource('trucks', 'Api\TruckController');
});

В laravel cors. php конфигурационный файл. Я изменил "support_credentials" с false на true

'supports_credentials' => true,

Мне кажется, что информация cook ie не передается через вызов API ( но я правда не уверен). Эта настройка работает на моем локальном компьютере, но не на сервере, на котором я развернут.

1 Ответ

0 голосов
/ 20 апреля 2020

Необходимо добавить переменную среды в файл .env для SANCTUM_STATEFUL_DOMAINS и сделать ее равной имени домена.

В файле конфигурации laravel. php ...

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost,127.0.0.1')),
...