2017-07-03 65 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