如何检查AWS Cognito中已存在电子邮件?

时间:2018-06-28 12:35:25

标签: amazon-web-services amazon-cognito

我正在使用AWS Cognito进行登录/注册。离我们只有两个步骤。

1)它会询问您的电子邮件。 2)如果电子邮件已经存在,则会询问密码,否则会提示创建密码。根据以上登录或注册条件显示的此步骤上的按钮。

在用户输入电子邮件之后,我需要一种使用AWS javascript SDK登录到cognito的方法,以检查是否已注册电子邮件。

谢谢

2 个答案:

答案 0 :(得分:2)

  1. 如果您要检查用户是否存在于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;
        }
      });
    }
    
  2. 如果要使用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) } }); }

希望我的回答有用。