【问题标题】:AWS Cognito Accepting Any PasswordAWS Cognito 接受任何密码
【发布时间】:2019-03-19 06:35:54
【问题描述】:

我是第一次使用 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);
    }

【问题讨论】:

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


    【解决方案1】:

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

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

    记得

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

    1. 令牌已经是cached

    缓存

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

    您的应用更新

    事实上,为了更好的用户体验,您希望用户使用该应用程序,并且不需要每次她想使用您的应用程序时都登录(例如,查看邮件应用程序、社交媒体应用程序等) .但是,您的应用程序需要处理它,您有两种选择:

    1. 必要时重定向到登录:如果用户已经登录并想再次使用应用程序,您的应用程序需要根据 Cognito 用户池验证用户,然后才重定向如有必要,用户可以访问登录页面。

    2. 移除令牌:如果您真的希望用户每次使用应用程序时都登录,那么在用户退出时移除令牌;但为了用户体验,我不建议这样做。

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 2017-06-25
      • 2018-04-12
      • 2017-05-27
      相关资源
      最近更新 更多