Sailsjs + vuejs + axios + CSRF 令牌

Sailsjs + vuejs + axios + CSRF tokens

我有些事情不明白。总是得到一个错误 403。我在前端有一个代码(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

headers

怎么了?

Sails 在配置> 安全文件中有一个名为 csrf 的 属性。如果将其设置为 true,则只需添加

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

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

我使用的是 sails 1.0.2,它运行良好。

所以,一切都很简单。 在 (sails.js) 文件 security.js 中更改 allowCredentials: true 上的 allowCredentials: false,并在前端 (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

在axios请求的headers中添加:

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