AWS认证新密码延续 - Android

问题描述:

希望有人可以帮助我,我已经尝试了几天。我正在构建一个Android应用并整合了Amazon Cognito登录。 我想仅使用管理面板在Amazon Cognito中以管理员身份创建用户。这样做时,一个要求是用户更改密码。在这是一个匿名类,以验证新的密码我有匿名类下面的代码用户CognitoUserPoolSignInProvider:AWS认证新密码延续 - Android

@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(); 
     } 

    } 

我有一个名为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(); 

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

您需要使用按钮单击回调拉入用户密码。由于您的代码现在被写入,密码将被设置为空字符串(或创建时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); 
     } 
    }); 
}