Django 响应代码 200 React 接受错误代码
Django response code 200 React accept error code
我有一个带有 React 前端和 Django rest API 后端的网络应用程序。
当我输入正确的用户名和密码登录时,我收到了当用户名或密码错误时应该出现的消息。
反应代码:
fetch('/token-auth/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({username: this.state.username, password: this.state.password})
})
.then(res => res.json())
.then(json => {
if (json.ok) {
localStorage.setItem('token', json.token);
this.props.notify_login(this.state.username)
}
else {
this.setState({been_failed: true})
}
});
正如您所理解的那样,代码进入了 else 块。但是 Django 服务器打印以下消息说响应代码是 200。
"POST /token-auth/ HTTP/1.1" 200 286
有谁知道是什么导致了这样的事情?
我从未使用过提取 API,但谷歌搜索它,看起来 ok
是响应的 属性,而不是 res.json()
。这可能就是 else
块被执行的原因,res.json().ok
将是未定义的。请尝试以下操作:
fetch("/token-auth/", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
username: this.state.username,
password: this.state.password,
}),
}).then((res) => {
if (res.ok) {
const json = res.json();
localStorage.setItem("token", json.token);
this.props.notify_login(this.state.username);
} else {
this.setState({ been_failed: true });
}
});
我设法通过切换到 Axios 来修复它,而不是在失败时检查状态代码,而是转到 catch
axios( {
url: '/token-auth/',
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: JSON.stringify({username: this.state.username, password: this.state.password})
})
.then(response => {
localStorage.setItem('token', response.data.token);
this.props.notify_login(this.state.username)
})
.catch(error => {
this.setState({been_failed: true})
});
我有一个带有 React 前端和 Django rest API 后端的网络应用程序。 当我输入正确的用户名和密码登录时,我收到了当用户名或密码错误时应该出现的消息。
反应代码:
fetch('/token-auth/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({username: this.state.username, password: this.state.password})
})
.then(res => res.json())
.then(json => {
if (json.ok) {
localStorage.setItem('token', json.token);
this.props.notify_login(this.state.username)
}
else {
this.setState({been_failed: true})
}
});
正如您所理解的那样,代码进入了 else 块。但是 Django 服务器打印以下消息说响应代码是 200。
"POST /token-auth/ HTTP/1.1" 200 286
有谁知道是什么导致了这样的事情?
我从未使用过提取 API,但谷歌搜索它,看起来 ok
是响应的 属性,而不是 res.json()
。这可能就是 else
块被执行的原因,res.json().ok
将是未定义的。请尝试以下操作:
fetch("/token-auth/", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
username: this.state.username,
password: this.state.password,
}),
}).then((res) => {
if (res.ok) {
const json = res.json();
localStorage.setItem("token", json.token);
this.props.notify_login(this.state.username);
} else {
this.setState({ been_failed: true });
}
});
我设法通过切换到 Axios 来修复它,而不是在失败时检查状态代码,而是转到 catch
axios( {
url: '/token-auth/',
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: JSON.stringify({username: this.state.username, password: this.state.password})
})
.then(response => {
localStorage.setItem('token', response.data.token);
this.props.notify_login(this.state.username)
})
.catch(error => {
this.setState({been_failed: true})
});