AWS Cognito接受任何密码

时间:2018-10-14 19:43:26

标签: android amazon-web-services authentication amazon-cognito

我是第一次使用Android应用程序实施AWS。

我们想使用Cognito对用户进行身份验证,并有选择地提供来自DynamoDB的数据。

我已经成功设置了用户池,并且可以看到新的注册出现在用户列表中。尝试使用不存在的电子邮件登录失败。

但是,Cognito始终使用有效的电子邮件地址登录,无论输入密码如何

我的程序出了什么问题?

public class CognitoController extends Application {
    static CognitoUserPool pool;
    static String userEmail;
    public void onCreate(){
        super.onCreate();
        pool = new CognitoUserPool(this,
                "us-east-xxxx",
                "xxxx",
                "xxxx",
                new ClientConfiguration(),
                Regions.US_EAST_1);
    }
}

-

private void actionAdminLogin(){
        UtilityInterfaceTools.hideSoftKeyboard(AdminLoginActivity.this);
        String inputEmail = ((EditText) findViewById(R.id.input_admin_email)).getText().toString();
        String inputPassword = ((EditText) findViewById(R.id.input_admin_password)).getText().toString();
        CognitoController.userEmail = inputEmail;
        details = new AuthenticationDetails(inputEmail, inputPassword, null);

        AuthenticationHandler auther = new AuthenticationHandler() {
            @Override
            public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
                Toast.makeText(AdminLoginActivity.this, "Congratulations It Works...", Toast.LENGTH_LONG).show();
                startActivity(new Intent(AdminLoginActivity.this, AdminPortalActivity.class));
                finish();
            }

            @Override
            public void getAuthenticationDetails(AuthenticationContinuation continuation, String email) {
                continuation.setAuthenticationDetails(details);
                continuation.continueTask();
            }

            @Override
            public void getMFACode(MultiFactorAuthenticationContinuation continuation) {
                continuation.continueTask();
            }

            @Override
            public void authenticationChallenge(ChallengeContinuation continuation) {
                continuation.continueTask();
            }

            @Override
            public void onFailure(Exception exception) {
                TextView errorMessage = findViewById(R.id.message_invalid_credentials);
                errorMessage.setText(exception.toString());
                errorMessage.setVisibility(View.VISIBLE);
            }
        };
        CognitoController.pool.getUser(inputEmail).getSessionInBackground(auther);
    }

1 个答案:

答案 0 :(得分:1)

我认为您的问题(顺便说这不是问题)是:

  1. 在池的Cognito设置中,您选择的设备为remembered
  

记住

     还跟踪

设备。在用户身份验证期间,分配给已记住设备的密钥和机密对用于对设备进行身份验证,以验证它与用户先前用于登录应用程序的设备是否相同。用于查看已记住设备的API已添加到Android,iOS和JavaScript SDK的新版本中。您还可以从Amazon Cognito控制台中查看已记住的设备。

  1. 令牌已为cached
  

缓存

     

Android Mobile SDK在SharedPreferences中将最后一个成功通过身份验证的用户和该用户的令牌缓存在设备上本地。 SDK还提供了获取最后一个成功通过身份验证的用户的方法。

您的应用程序更新

实际上,为了获得更好的用户体验,您希望用户使用该应用程序,并且不需要每次她想要使用您的应用程序时登录(例如查看邮件应用程序,社交媒体应用程序等)。 。但是,您的应用程序需要处理此问题,这里有两个选择:

  1. 必要时重定向至登录:如果用户已经登录并想再次使用该应用程序,则您的应用程序需要根据Cognito用户池验证该用户。 ,如有必要,将用户重定向到登录页面。

  2. 删除令牌:如果您确实希望用户在每次使用该应用程序时都登录,则在用户退出时删除该令牌;否则,请删除令牌。但为了用户体验,我不建议您这样做。