【发布时间】:2019-01-10 23:44:30
【问题描述】:
我从事后端开发多年,但现在我也想学习前端,所以我选择 React 作为我的前端框架开始。我花了两天时间学习使用 Axios 将请求从 React 应用程序发送到 Django Rest Framework 后端,但我遇到了冲突csrf cookie 问题。到目前为止,我已经发布了几个问题,我终于可以发送一个被后端接受的正确格式的请求......只是得到一个Forbidden (CSRF token missing or incorrect.) 错误。
我想我获取和使用 csrf 令牌的方法可能不是正确的,所以我希望你指出我的错误并教我解决它。
首先,我向后端发送一个GET 请求,唯一的目标是获得一个csrf 令牌(我这样做了),并为这样的令牌设置了一个cookie:
class App extends Component {
render() {
const axios = require('axios');
axios.get('http://127.0.0.1:8000/es/api/hand_shake/')
.then(function (response) {
Cookies.set('csrftoken', response['data']['cookie']);
console.log(response);
})
.catch(function (error) {
console.log(error);
})
return (
<div className="App">
<LoginModal />
</div>
);
}
}
export default App;
其次,在另一个模块中,我从 cookie 中获取令牌并在 POST 请求中使用它:
handleClick() {
const axios = require('axios');
var csrfCookie = Cookies.get('csrftoken');
console.log(csrfCookie)
axios.post('http://127.0.0.1:8000/es/api-auth/login/',
{
next: '/',
username: 'admin@admin.com',
password: 'Cancun10!',
},
{
headers: {
'x-xsrf-token': csrfCookie,
},
withCredentials: true,
}
)
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
})
}
我终于让后端接受了请求,但我收到了错误Forbidden (CSRF token missing or incorrect.)。
以我的方式获取令牌,然后以我尝试的方式使用它是否正确?
【问题讨论】:
标签: reactjs django-rest-framework axios csrf django-csrf