2017-07-03 66 views
0

我试图生成refreshToken新的accessToken。使用Oauth2登录。我有这样的代码:无法从refreshToken产生新的accessToken即使承诺是200

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) 
     } 
    }) 
    } 

当测试它在失眠的一切工作正常,我能够生成从refreshToken中的accessToken(我已经存储了与AsyncStorage)。

回答

1

你忘记返回

.then((response) => {console.log(response); return response.json(); }) 

如果箭头函数定义它interperted作为语句块有{}。所以你需要手动返回。 Docs

(参数1,参数2,...,paramN)=> {语句}

(参数1,参数2,...,paramN)=>表达

//等效于:(参数1,参数2, ...,paramN)=> {return expression; }

+0

非常感谢这一点。起初很奇怪,因为如果我没有记录'response'本身,'responseData'没有被记录。 'return response.json()'修复了它。谢谢 – nikasv