Sailsjs + vuejs + axios + CSRF токены - PullRequest
0 голосов
/ 06 ноября 2018

я чего-то не понимаю. Всегда получаю ошибку 403. У меня есть код во внешнем интерфейсе (vue.js), здесь я получаю токен _csrf от Sails.js, все нормально.

axios.get('http://localhost:1337/csrfToken')
        .then(response => {

            this.$store.commit('csrf_update', response.data._csrf);
            console.log("_csrf===",response.data._csrf);
            axios.defaults.headers.post['X-CSRF-Token'] = response.data._csrf;
        })

И у меня есть бэкэнд sails.js, настройки в security.js

cors: {
 allRoutes: true,
 allowOrigins: 'http://localhost:8080',
 allowCredentials: false,
 allowRequestMethods:'GET, POST',
 allowRequestHeaders:'content-type, X-CSRF-Token'}, csrf: true

У меня есть такой токен _csrf: lM8avM1X-KvKz9v2zLnbQZFf8lKOThX9Llb4 И у меня ошибка 403 при запросе.

axios.post('http://localhost:1337/login', form)
    .then(response => {
        this.$router.push('/kabinet');
    }).catch(error => { console.log(error); });

список 403

вот мои заголовки

заголовки

что не так?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Итак, все было очень просто. В файле (sails.js) security.js измените allowCredentials: false на allowCredentials: true, а во внешнем интерфейсе (vue.js) измените axion, добавьте параметр withCredentials: true, например

axios.get('http://localhost:1337/csrfToken',{ 
withCredentials: true
}).then(response => {
            console.log("_csrf===",response.data._csrf);
            axios.defaults.headers.post['X-CSRF-Token'] = response.data._csrf;
})

и во всех запросах axios должно быть withCredentials: true

0 голосов
/ 07 ноября 2018

У Sails есть свойство csrf в файле config> security. Если вы установите значение true, вы можете просто добавить

<input type="hidden" name="_csrf" value="<%= _csrf %> />

к вашей форме или в том месте, где она вам нужна.

Я на парусе 1.0.2 и работает тихо хорошо.

...