首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS认知登录与角2路由

AWS认知登录与角2路由
EN

Stack Overflow用户
提问于 2017-07-11 18:41:32
回答 1查看 1.1K关注 0票数 1

我无法导航到下一页的AWS认知登录认证成功从我的角2网络应用程序。登录是成功的,我可以在控制台中看到令牌,但是当我在成功的身份验证中导航时,我会得到下面提到的错误。这是什么错误?

它让我犯了这个错误:

代码语言:javascript
复制
 EXCEPTION: Cannot read property 'navigate' of undefined

守则如下:

组件

代码语言:javascript
复制
authenticateUser(loginCredentials:any){

       var authenticationData = {
            Username : loginCredentials.username,
            Password : loginCredentials.password
        };
        //console.log("authenticationData..",authenticationData);
        var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
        console.log("authenticationDetails..",authenticationDetails);
        var poolData = {
            UserPoolId : "cognito user pool id ", // Your user pool id here
            ClientId : "cognito user pool client id" // Your client id here
        };
        //console.log("poolData..",poolData);
        var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
        console.log("userPool..",userPool);
        var userData = {
            Username : loginCredentials.username,
            Pool : userPool
        };
        //console.log("userData..",userData);
        var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
        console.log("cognitoUser..",cognitoUser);

        cognitoUser.authenticateUser(authenticationDetails, {
            onSuccess: function (result) {
                console.log('access token + ' + result.getAccessToken().getJwtToken());
                console.log('idToken + ' + result.idToken.jwtToken);

                if(result.getAccessToken().getJwtToken() != null){

                    this.router.navigate(['nextPage']);

                }


            },

            onFailure: function(err) {
                console.log('error : ' + err);
                alert(err);
            },


        })

   }
EN

回答 1

Stack Overflow用户

发布于 2017-08-02 11:33:52

你最好的办法是把它变成一个承诺,而不是使用回调,并在“然后接住”内部处理你的逻辑。这将允许您更好地控制您的代码,并在其他地方重用它。我已经将您的代码转换为一个承诺,并添加了以前使用的回调代码之一,并将其转换为一个承诺,供您进行比较。许多工程师使用承诺或可观察的方法来代替回调噩梦。

下面,您的代码使用承诺。

代码语言:javascript
复制
cognitoUser.authenticateUser(authenticationDetails).promise().then(result => {
  console.log('access token + ' + result.getAccessToken().getJwtToken());
  console.log('idToken + ' + result.idToken.jwtToken);
  if (result.getAccessToken().getJwtToken() !== null) {
    this.router.navigate(['nextPage']);
  }
}).catch(err => {
  console.log('error : ' + err);
  alert(err);
})

下面,我的代码使用回调,然后使用承诺。

代码语言:javascript
复制
confirmSMSLogin(data: string) {
  AWS.config.region = 'us-east-1';
  AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:xxx-xxxx.etc',
  });

  const cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider();
  const params = {
    ChallengeName: 'CUSTOM_CHALLENGE',
    ClientId: 'asdf1234...etc',
    ChallengeResponses: {
      USERNAME: this.userModelService.LoginUserModelService[0].username,
      ANSWER: data
    },
    Session: this.userModelService.LoginUserModelService[0].session
  };


  // DISABLED THIS FUNCTION WITH CALLBACKS WHICH LIMITED THE CONTROL OVER THE FUNCTION.
  // cognitoIdentityServiceProvider.respondToAuthChallenge(params, function(err, data) {
  //   if (err) {
  //     console.log(err, err.stack);
  //   } else { // successful response
  //     console.log('Successful Authentication');
  //     AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  //       IdentityPoolId: 'us-east-1:asdf1234..etc',
  //       Logins: {'cognito-idp.us-east-1.amazonaws.com/us-east-asdf..etc':
  //         data['AuthenticationResult']['IdToken']}
  //     });
  //   }
  // })

  // Changed aws function callbacks to promise to better control of the flow.
  return cognitoIdentityServiceProvider.respondToAuthChallenge(params).promise().then((data) => {
    console.log('Success to Log in')
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'us-east-1:asdf1234...etc',
      Logins: {
        'cognito-idp.us-east-1.amazonaws.com/us-east-1asdf..etc': data['AuthenticationResult']['IdToken']
      }
    });
    this.userModelService.UserSignedInModelService.push(this.jwtHelper1.decodeToken(data.AuthenticationResult.IdToken))
    this.router.navigate([''])
  }).catch((err) => {
    if (err) {
      console.log('has an error', err)
    }
  })
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45042314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档