AWS cognito 新密码延续 - Android

Posted

技术标签:

【中文标题】AWS cognito 新密码延续 - Android【英文标题】:AWS cognito new password continuation - Android 【发布时间】:2017-04-08 10:51:46 【问题描述】:

希望有人可以帮助我,我已经尝试了几天。我正在构建一个 android 应用程序并集成 Amazon Cognito 登录。 我想使用管理面板仅在 Amazon Cognito 中以管理员身份创建用户。这样做时,一项要求是用户更改其密码。在 CognitoUserPoolSignInProvider 这是一个匿名类中,为了使用新密码对用户进行身份验证,我在匿名类中有以下代码:

@Override
    public void authenticationChallenge(final ChallengeContinuation continuation) 

        if ("NEW_PASSWORD_REQUIRED".equals(continuation.getChallengeName())) 
            NewPasswordContinuation newPasswordContinuation = (NewPasswordContinuation) continuation;
            newPasswordContinuation.setPassword("users new password goes here");
            continuation.continueTask();
        

    

我有一个单独的 Activity 类,名为 ChangePassword。这链接到用户界面并从用户那里获取编辑文本框中的输入。

@Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_change_password);


        password = (EditText) findViewById(R.id.newPassword);
        submit = (Button) findViewById(R.id.submit);

        String pass = password.getText().toString();

如何让用户输入匿名类来设置新密码? 非常感谢任何帮助

【问题讨论】:

【参考方案1】:

您需要使用按钮点击回调来拉入用户密码。由于现在编写代码,密码将设置为空字符串(或创建时 EditText 字段中的任何内容)。

从这里开始:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_change_password);
    final EditText password = (EditText) findViewById(R.id.newPassword);
    Button submit = (Button) findViewById(R.id.submit);
    submit.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            String pass = password.getText().toString();
        
    );

一旦您设置了按钮单击操作,请创建一个覆盖 authenticationChallenge 方法的类实例。将该类传递给适当的 AWS 类进行身份验证。像这样的:

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_change_password);
    final EditText password = (EditText) findViewById(R.id.newPassword);
    Button submit = (Button) findViewById(R.id.submit);
    submit.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            String pass = password.getText().toString();
            AuthenticationHandler h = new AuthenticationHandler() 
                @Override
                public void onSuccess(CognitoUserSession cognitoUserSession, CognitoDevice cognitoDevice)  
                @Override
                public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String s)  
                @Override
                public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation)  
                @Override
                public void authenticationChallenge(ChallengeContinuation continuation) 
                    if ("NEW_PASSWORD_REQUIRED".equals(continuation.getChallengeName())) 
                        NewPasswordContinuation newPasswordContinuation = (NewPasswordContinuation) continuation;
                        newPasswordContinuation.setPassword(pass);
                        continuation.continueTask();
                    
                
                @Override
                public void onFailure(Exception e)  
            ;
            CognitoUserPool pool = new CognitoUserPool(getApplicationContext(), "poolId", "clientId", "clientSecret", Regions.US_WEST_2);
            pool.getUser("userId").getSession(h);
        
    );

【讨论】:

以上是关于AWS cognito 新密码延续 - Android的主要内容,如果未能解决你的问题,请参考以下文章

忘记了来自 aws cognito 的密码链接

AWS Cognito - SerializationException(在不期望的地方找到结构或映射的开始)

使用 aws amplify cognito 的自定义身份验证流程

AWS CloudFormation 脚本失败 - 不允许 Cognito 使用您的电子邮件身份

text [使用CLI注册Cognito用户] #aws #cognito#aws-cli

AWS Cognito - 使用 JWT 与 cognito.getUser 开发工具包验证令牌