【发布时间】:2021-08-22 08:04:41
【问题描述】:
我正在尝试寻找 3 天的解决方案,但没有找到与我的问题相关的任何内容。我有一个 Nuxt.js 前端,它使用 auth module 从 DRF 后端获取 JWT 令牌。
登录后,服务器打印出这个:
Forbidden (CSRF cookie not set.): /api/accounts/login/
[04/Jun/2021 10:36:44] "POST /api/accounts/login/ HTTP/1.1" 403 2870
在网络选项卡中,我尝试登录时可以在请求标头中看到:X-CSRFToken: csrftoken,这意味着 csrf 令牌未正确传递。对吧?
在我的 nuxt.config.js 文件中,我有以下设置:
axios: {
baseURL: 'http://localhost:8000',
headers: {
"X-CSRFToken": "csrftoken",
},
xsrfCookieName: "csrftoken",
xsrfHeaderName: "X-CSRFToken",
},
// authentication module configuration
auth: {
strategies: {
local: {
endpoints: {
login: {
url: '/api/accounts/login/',
method: 'post',
propertyName: 'access',
altProperty: 'refresh'
},
logout: {},
user: false
}
}
},
redirect: {
login: '/login',
},
},
router: {
middleware: ['auth']
},
...
}
这是我的登录脚本:
export default {
data() {
return {
user: {
username: "",
password: "",
},
};
},
methods: {
async login() {
try {
await this.$auth.loginWith("local", {
data: this.user,
});
console.log("VALID");
} catch (err) {
console.log("INVALID");
}
},
},
};
如何将 csrf 令牌正确传递到我的 Django 后端?
【问题讨论】:
-
你能给我们举个例子来说明它应该是什么样子吗?因为在这里,您确实将其设置为
"X-CSRFToken": "csrftoken"并且它正在发送它应该发送的内容,不是吗?
标签: django vue.js django-rest-framework jwt nuxt.js