我正在尝试从refreshToken生成新的accessToken。使用Oauth2登录。我有这段代码:
componentWillMount(){
AsyncStorage.multiGet([USER_TOKEN, USER_REFRESH_TOKEN,USER_REMEMBERED]).then((data) => {
console.log(data)
const userRemembered = JSON.parse(data[2][1])
console.log(userRemembered)
const userAccessToken = data[0][1]
console.log(userAccessToken)
const userRefreshToken = data[1][1]
console.log(userRefreshToken)
if (!userAccessToken) {
fetch("SOME_URL", {
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
refreshToken: userRefreshToken
})
})
.then((response) => {response.json(); console.log(response)}) //this logs 200
.then(responseData => {
console.log(responseData) //this logs undefined
})
.catch((error) => {
console.log(error)
})
}
else{
this.setState({
token:userAccessToken,
refreshToken: userRefreshToken,
isLoggedIn:userRemembered
})
console.log('token not expired')
console.log(this.state);
this.changeRoute(this.state)
}
})
}
在Insomnia中测试时,一切正常,我可以从refreshToken生成accessToken(我已经存储了AsyncStorage)。
答案 0 :(得分:1)
你忘了回来
.then((response) => {console.log(response); return response.json(); })
如果箭头函数定义中有{}
,则它将作为一个语句块进行交互。所以你需要手动返回。 Docs
(param1,param2,...,paramN)=> {statements}
(param1,param2,...,paramN)=>表达
//相当于:(param1,param2,...,paramN)=> {return expression; }