我无法导航到下一页的AWS认知登录认证成功从我的角2网络应用程序。登录是成功的,我可以在控制台中看到令牌,但是当我在成功的身份验证中导航时,我会得到下面提到的错误。这是什么错误?
它让我犯了这个错误:
EXCEPTION: Cannot read property 'navigate' of undefined守则如下:
组件
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);
},
})
}发布于 2017-08-02 11:33:52
你最好的办法是把它变成一个承诺,而不是使用回调,并在“然后接住”内部处理你的逻辑。这将允许您更好地控制您的代码,并在其他地方重用它。我已经将您的代码转换为一个承诺,并添加了以前使用的回调代码之一,并将其转换为一个承诺,供您进行比较。许多工程师使用承诺或可观察的方法来代替回调噩梦。
下面,您的代码使用承诺。
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);
})
下面,我的代码使用回调,然后使用承诺。
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)
}
})
}
https://stackoverflow.com/questions/45042314
复制相似问题