【发布时间】:2018-07-18 20:47:36
【问题描述】:
我在 vue.js 中定义了一个 Login.vue 组件,让我可以通过 AWS Cognito 将用户登录到我的应用程序。我使用___.authenticateUser() 方法登录用户并启动与Cognito 的会话。以下是执行此操作的实际代码:
export default {
name : 'Login',
data: function() {
return {
errorMessageHidden: true,
formHidden: false,
errorMessage: '',
email: '',
password: ''
}
},
methods: {
showValuesToMe: function() {
console.log(this.errorMessageHidden)
},
handleLogin: function() {
const data = {
Username: this.email,
Pool: userPool
}
const cognitoUser = new CognitoUser(data);
const authenticationData = {
Username : this.email,
Password : this.password,
};
function showErrorMessage(err) {
this.errorMessageHidden = false;
this.errorMessage = err.message;
console.log("The method got called... errorMessageHidden = " + this.errorMessageHidden);
}
const authenticationDetails = new AuthenticationDetails(authenticationData)
cognitoUser.authenticateUser(authenticationDetails, {
callback: showErrorMessage,
onSuccess: function(result) {
console.log('access token ' + result.getAccessToken().getJwtToken());
},
onFailure: function(err) {
this.callback(err);
}
});
},
hideErorrMessage: function() {
this.errorMessageHidden = true;
}
}
}
问题在于,在组件的 handleLogin() 函数内部,当调用 ___.authenticateUser() 时,Cognito SDK 调用 onSuccess() 或 onFailure(),具体取决于 AWS 的身份验证结果。
当我尝试修改errorMessageHidden 和errorMessage 时,它们不能在onFailure() 内部!这是因为onFailure() 方法是一个回调方法和一个闭包。
为了访问/修改这些值,我在闭包的父级范围内定义了function showErrorMessage(err) {...}。现在我可以访问data 中定义的值,但仍然无法修改它们。
谁能弄清楚我如何更改值以进行更改并在浏览器中显示错误。
【问题讨论】:
标签: javascript amazon-web-services vue.js callback closures