【发布时间】:2019-07-17 19:32:57
【问题描述】:
所以我试图在我的站点上放置一个注销按钮,并且我将用户的令牌存储在 localstorage 中,但是当单击注销按钮时,一旦站点重定向回,令牌就会从 localstorage 中删除登录页面,我收到错误Unhandled Rejection (SyntaxError): Unexpected token u in JSON at position 0
每次注销时它只会执行一次。如果您刷新页面,它会正常加载,但显然没有人希望在他们的网站上出现这样的错误。
登录后令牌存储如下:
async userLogin(e) {
const { email, password } = this.state;
const target = e.target.value
try {
let response = await fetch("<API URL removed for security reasons>", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json"
},
body: JSON.stringify({
email: email,
password: password,
uid: email
})
});
let res = await response.text();
if (response.status >= 200 && response.status < 300) {
let accessToken = res;
console.log(accessToken);
localStorage.setItem("access_token", accessToken);
this.setState({
loginFailed: false,
isFlipped: true,
});
} else {
let error = res;
this.setState({
loginFailed: true
});
alert("Invalid login credentials");
throw error;
}
} catch (error) {
this.setState({
error: error,
loginFailed: true
});
console.log("error: " + error);
}
}
localStorage.setItem("access_token", accessToken); 是存储令牌的位置。我使用localStorage.removeItem("access_token") 删除了令牌我也尝试过使用localStorage.clear(),但是在返回登录屏幕时它给出了同样的错误。当按下注销按钮时,我所做的只是删除令牌并重定向到登录屏幕,这并不复杂。
const logOut = () => {
localStorage.clear()
console.log(localStorage)
return <Redirect to="/login"/>
}
当根页面解析本地存储以检查令牌时出现错误。以下是错误信息的来源:
componentWillMount() {
const hasToken = JSON.parse(localStorage.access_token)
if (hasToken.token_info.token !== null) {
this.setState({
authenticated: true
})
}
}
【问题讨论】:
-
在你解析检查之前确保它不是 undefined 。
if(localStorage.access_token!===undefined){ const hasToken = JSON.parse(localStorage.access_token) } -
userLogin是事件处理程序吗?为什么在客户端设置Accept: "application/json"标头?.catch()是否链接到userLogin()函数来处理错误?
标签: javascript reactjs syntax-error local-storage