Sailsjs + vuejs + axios + CSRF令牌

时间:2018-11-06 13:35:02

标签: vue.js sails.js axios csrf http-status-code-403

我有些事情不明白。总是收到错误403。我在frontend(vue.js)中有一个代码,在这里我从Sails.js中获得了一个令牌_csrf,没关系。

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); });

list 403

那是我的标题

headers

怎么了?

3 个答案:

答案 0 :(得分:1)

Sails在config> security文件中具有一个称为csrf的属性。如果将其设置为true,则只需添加

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

到您的表格或您需要的地方。

我在航行中1.0.2,它运行的很好。

答案 1 :(得分:1)

所以,一切都非常简单。 在(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

答案 2 :(得分:0)

在 axios 请求的头部添加:

"x-csrf-token": window.SAILS_LOCALS._csrf