2017-05-22 270 views
0

是否有可能我們可以在一小時之前強制過期並使用刷新令牌獲得新的IdToken 或 如何在amazon-cognito-identity-js-node模塊中使用refreshToken值自動過期後獲得新的IdToken?使用AWS Cognito中的refreshToken值刷新IdToken?

我越來越

TypeError: refreshToken.getToken is not a function as error.

我使用這個代碼如下:

cognitoUser.refreshSession(refreshToken, (err, session) => { 
          if (err) {//throw err; 
          console.log('In the err'+err); 
          } 
          else{ 
          console.log('session '+session); 
          } 
        }); 

我在函數傳遞refreshToken正確的值。 在文件CognitoUser.js上功能

refreshSession(refreshToken, callback) 
{ 
    const authParameters = {}; 
    authParameters.REFRESH_TOKEN = refreshToken.getToken(); /* Here I am getting error*/ 
    ... 
    .... 
} 

在情況下,如果我取代的功能refreshSession()秒符合

authParameters.REFRESH_TOKEN = this.signInUserSession.getRefreshToken().getToken(); 

然後錯誤去了。

我曾嘗試使用的代碼如下:

var poolData = { 
     UserPoolId: 'xx-xxx-x_xxxxx', 
     ClientId: 'xxxxx', 
     AuthFlow: 'xxxxx' 
    }; 

    userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData); 


if(minuteDiff >= 60) { // Defult Id Token Expired 
    // Get New IdToken using RefreshToken 
    var userData = { 
     Username : cognitousername, 
     Pool : userPool 
    }; 
    var cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData); 

    var refreshToken = localStorage.getItem('refreshToken'); 

    cognitoUser.getSession(function(err, session) { 
     if (err) {     
      res.send(err); 
     } 
     else{ 
       /* Session Refresh */ 
       cognitoUser.refreshSession(refreshToken, (err, session) => { 

        if (err) {//throw err; 
         console.log('In the err'+err); 
        } 
        else{ 
         var regsmar_apiKey = session.idToken.jwtToken; // will this provide new IdToken? 
         localStorage.setItem('api_key',regsmar_apiKey); 
        } 
       }); 
     } 
    }); 
} 

任何一個可以請幫我在那裏,我應該如何更新IdToken過期後?

回答

0

有可能refreshToken不是你所期望的。例如,如果您嘗試在undefined值上調用getToken(),則會產生此錯誤。

你可以請張貼更多的代碼?

+0

所以,能否請您詳細說明如何更新IdToken後自動到期即1-時間?我應該再次以編程方式重新登錄嗎?有沒有可以幫助我的內容或文檔? – Deep

+0

通過RefreshTokenApi或InitiateAuth的REFRESH_TOKENS(_AUTH)流刷新令牌是實現此目的的方法。根據github的例子(https://github.com/aws/amazon-cognito-identity-js),嘗試getSession來做到這一點。 –

+0

剛剛更新我的問題與代碼,你能檢查嗎? – Deep

0

我覺得refreshSession期望CognitoRefreshToken類的實例,而不僅僅是一個普通的字符串。 getToken是您的案例中缺少該類的方法。你可能想試試這個:

var CognitoRefreshToken = require('amazon-cognito-identity-js').CognitoRefreshToken; 
... 
var token = new CognitoRefreshToken({ RefreshToken: refreshToken }) 
cognitoUser.refreshSession(token, (err, session) => { ... }); 

我是在這裏看到:https://gist.github.com/kndt84/5be8e86a15468ed1c8fc3699429003ad