我已经建立了django服务器来管理我的数据,然后我有了桌面react应用程序,可以在其中创建新用户/登录/发布数据,它可以完美运行,它基于csrf令牌验证,因此没有问题。但是,我也有本机应用程序,该应用程序应允许用户登录,并获取属于他的数据。还有一个问题,如何在本机反应中获得CSRF令牌?在桌面应用程序中,它或多或少看起来像这样,但是我不知道如何登录react native,因为我不能简单地使用csrf令牌获取Cookie。
componentDidMount() {
const csrfToken = Cookies.get('csrftoken')
this.setState({csrfToken})
}
loginHandler = login_data => {
this.setState({
user: login_data.user,
password: login_data.password
}, () => {
const auth = {
"username": this.state.user,
"password": this.state.password
}
fetch("http://localhost:8000/data/", {
method: 'POST',
credentials: 'include',
headers: {
"X-CSRFToken": this.state.csrfToken,
},
body: JSON.stringify(auth)
})
.then((res) => res.json())
.then(resp => console.log(resp))
.then(() => this.getData())
.catch(() => this.setState({
user: "",
passowrd: ""
}))
})
};
有两个选项:
如果您的django应用API仅服务于移动应用(本机响应),则对于该应用使用的那些API,您根本不需要CSRF保护。这是因为CSRF可以防止在浏览器而非应用程序中进行伪造。
但是如果您的api也用在浏览器中,那么您应该创建一个端点,以使用返回json中csrf令牌的Django视图来专门获取csrf令牌(GET / api / csrftoken)。