首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS认知接受任何密码

AWS认知接受任何密码
EN

Stack Overflow用户
提问于 2018-10-14 19:43:25
回答 1查看 776关注 0票数 2

我第一次用Android应用程序实现AWS。

我们希望使用认知验证我们的用户,并有选择地提供来自DynamoDB的数据。

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

然而,科尼图总是登录一个有效的电子邮件地址,,而不管密码输入

我的过程怎么了?

代码语言:javascript
复制
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);
    }
}

-

代码语言:javascript
复制
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);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 07:47:02

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

  1. 在池认知设置中,您选择了设备为记起

记起 设备也会被跟踪。在用户身份验证期间,分配给已记住的设备的密钥和秘密对用于对设备进行身份验证,以验证它是否是用户以前用于登录到应用程序的同一设备。已经在安卓、iOS和JavaScript SDK的新版本中添加了用于查看记忆设备的API。你也可以在亚马逊的认知控制台上看到记忆中的设备。

  1. 令牌已经是缓存

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

您的应用程序更新

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

  1. 如果需要,重定向到登录:如果用户已经登录并希望再次使用应用程序,则应用程序需要对照认知用户池验证用户,只有到那时,如果有必要,将用户重定向到登录页面。
  2. 删除令牌:如果您真的希望用户每次使用应用程序时都登录,那么如果用户注册了令牌,则删除令牌;但为了用户体验,我不推荐这样做。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52806460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档