Laravel Sanctum со SPA: лучший способ установки файла cookie CSRF

В настоящее время мой СПА прост и имеет только контактную форму. Данные формы отправляются на бэкэнд. Для этого я установил Laravel Sanctum.

axios.get('/sanctum/csrf-cookie').then((response) => {
     axios.post('api/contact')
          .then((response) => {
              //doing stuff
          });
});

Это прекрасно работает. Однако мне было интересно. Где и в какое время в вашем SPA вы запускаете первоначальный запрос на получение файла cookie CSRF? (axios.get('/sanctum/csrf-cookie'))

Мои первые мысли были:

  • Каждый раз, когда страница монтируется / загружается
  • Только когда вы получаете 419 и пытаетесь обновить токен и повторить предыдущий запрос
  • Вы не запускаете никаких запросов API, только когда пользователь пытается войти в систему, и только тогда вы запрашиваете cookie (в моем случае у меня нет аутентификации пользователя)
  • Для каждого запроса API вы оборачиваете его axios.get('/sanctum/csrf-cookie') вокруг

person Philipp Mochine    schedule 02.06.2020    source источник


Ответы (1)


Итак, для будущих читателей я выбрал:

Only when you receive a 419 and you attempt to refresh the token and retry the previous request

Для этого я использую пакет axios-auth-refresh.

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

//bootstrap.js

import axios from 'axios';
import createAuthRefreshInterceptor from 'axios-auth-refresh';

axios.defaults.withCredentials = true;
axios.defaults.baseURL = process.env.GRIDSOME_BACKEND_URL;

const refreshAuthLogic = (failedRequest) => axios.get('/sanctum/csrf-cookie').then((response) => Promise.resolve());

createAuthRefreshInterceptor(axios, refreshAuthLogic, { statusCodes: [419] });

window.axios = axios;
person Philipp Mochine    schedule 03.06.2020