我正在使用AWS Cognito进行登录/注册。离我们只有两个步骤。
1)它会询问您的电子邮件。 2)如果电子邮件已经存在,则会询问密码,否则会提示创建密码。根据以上登录或注册条件显示的此步骤上的按钮。
在用户输入电子邮件之后,我需要一种使用AWS javascript SDK登录到cognito的方法,以检查是否已注册电子邮件。
谢谢
答案 0 :(得分:2)
如果您要检查用户是否存在于aws放大的前端,我在这里找到了答案https://github.com/aws-amplify/amplify-js/issues/1067
userExist(email: string) {
return this.cognitoService.userExist(email.toLowerCase()).then(res => {
return false;
}).catch(error => {
const code = error.code;
console.log(error);
switch (code) {
case 'UserNotFoundException':
return !this.redirectToRegister(email);
case 'NotAuthorizedException':
return true;
case 'PasswordResetRequiredException':
return !this.forgotPassword(email);
case 'UserNotConfirmedException':
return !this.redirectToCompleteRegister(email);
default:
return false;
}
});
}
如果要使用nodeJS在服务器端检查用户是否空闲并且尚不存在
checkIfUserDoesntExist(email) {
return new Promise(async (resolve, reject) => {
const payload = {
ClientId: configCognito.APP_CLIENT_ID,
AuthFlow: "ADMIN_NO_SRP_AUTH",
UserPoolId: configCognito.USER_POOL_ID,
AuthParameters: {
USERNAME: email,
PASSWORD: "123",
}
}
try {
await this.cognito.adminInitiateAuth(payload).promise();
reject(); // very unlikely
} catch (e) {
console.log("checkIfUserDoesntExist error", e);
switch (e.code) {
case 'UserNotFoundException':
resolve();
case 'NotAuthorizedException':
case 'PasswordResetRequiredException':
case 'UserNotConfirmedException':
default:
reject();
}
}
});
}
答案 1 :(得分:1)
Amazon Amplify通过Angular / React中aws-amplify的Auth导入使登录和注册过程非常简单。 在我的登录页面上,我要求每个用户注册他们的电子邮件是否确实存储在用户池中。如果用户已注册,则Cognito会引发“ UserExistsException”异常,该异常可以捕获在Auth.signUp承诺中,如下所示:
public cognitoSignUp(username, password, email){
Auth.signUp({
username,
password,
attributes: {
email,
},
validationData: []
})
.then(data => {
console.log(data)
})
.catch(error => {
//The user has already registered so go to the SignIn method
if(error['code'] === "UsernameExistsException"){
this.cognitoSignIn(username, password);
}
else{
console.log(error)
}
});
}
希望我的回答有用。