首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS Cognito登录(Android)

AWS Cognito登录(Android)
EN

Stack Overflow用户
提问于 2018-01-05 02:58:42
回答 3查看 6.3K关注 0票数 4

我正在尝试弄清楚如何使用AWS Cognito登录用户。tutorials似乎都是从注册用户的角度来处理用户的,而不是让他们登录。我不希望用户经历注册过程;这将在其他地方完成,由我们的办公室用户完成。我只想在这个应用程序中,有一个流程,让他们输入他们现有的用户名和密码,并登录。

我目前的理解是,Cognito用户池只支持使用像Facebook或Google这样的身份验证提供程序登录,或者支持非身份验证登录,我在确定这是否使用用户名和密码时遇到了困难(无论如何,我都找不到任何地方提供用户名和密码)。还有Cognito联合身份,它似乎也被称为Cognito User Pools,它有前面提到的注册教程,但没有关于只登录现有用户的内容。

我是否必须使用联合身份版本的用户池才能使用用户名和密码登录?如果不是,我如何使用非联合用户池来做到这一点?如果是这样,我如何创建一个仅用于登录而不是注册的流程?我试图从前面提到的教程中抓取看起来相关的部分,但我感到沮丧,因为我已经在这上面追了几个星期了,只有更多的东西依赖于其他东西,而其他东西又依赖于其他东西。

EN

回答 3

Stack Overflow用户

发布于 2018-04-12 20:46:13

流是如何工作的,这有点令人困惑。正如@Ionut Trestian解释的那样,我们需要从池中创建一个看似空白的用户,然后对该用户进行身份验证。API有一些变化,这是更新的方法。

代码语言:javascript
复制
   CognitoUserPool userPool = new CognitoUserPool(context, userPoolId, clientId, clientSecret, region;
//OR if using awsconfiguration.json
//    CognitoUserPool userPool = new CognitoUserPool(context, AWSMobileClient.getInstance().getConfiguration());

AuthenticationDetails authDetails = new AuthenticationDetails(username, password, null);

CognitoUser user = userPool.getUser();

//You might want do to the following bit inside a thread as it should be done in background
user.initiateUserAuthentication(authDetails, authHandler, true).run();
票数 5
EN

Stack Overflow用户

发布于 2018-10-13 18:51:07

如果注册是由办公室完成的,并且用户获得了他们的用户名和密码,那么您似乎需要从Cognito user Pool获取用户。要在Android应用程序中对用户进行身份验证,首先,您需要从Cognito用户池中进行以下配置:

  • 池id
  • 应用客户端id
  • 应用客户端机密
  • AWS Region

然后,您应该使用CognitoUserPool在您的应用程序中创建一个用户池实例,如下所示:

代码语言:javascript
复制
userPool = new CognitoUserPool(context, this.poolID, this.clientID, this.clientSecret, this.awsRegion);

要允许用户登录,请执行以下操作:

代码语言:javascript
复制
public void getUser(){
    CognitoUser cognitoUser =  userPool.getUser(userId);
    cognitoUser.getSessionInBackground(authenticationHandler);
}
AuthenticationHandler authenticationHandler = new AuthenticationHandler() {
    @Override
    public void authenticationChallenge(ChallengeContinuation continuation) {
      // Do Something
    }
    @Override
    public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
        Toast.makeText(appContext,"Sign in success", Toast.LENGTH_LONG).show();
        // Do Something
    }
    @Override
    public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
        // The API needs user sign-in credentials to continue
        AuthenticationDetails authenticationDetails = new AuthenticationDetails(userId, userPassword, null);
        // Pass the user sign-in credentials to the continuation
        authenticationContinuation.setAuthenticationDetails(authenticationDetails);
        // Allow the sign-in to continue
        authenticationContinuation.continueTask();
    }
    @Override
    public void getMFACode(MultiFactorAuthenticationContinuation multiFactorAuthenticationContinuation) {
      // Do Something
    }
    @Override
    public void onFailure(Exception exception) {
      // Do Something
    }
};

您可以找到有关集成用户登录和注册herehere的详细信息。

票数 2
EN

Stack Overflow用户

发布于 2018-01-05 03:18:21

Cognito用户池似乎就是你想在你的应用中使用的。Cognito用户池所做的是,它为您提供了一个存储用户属性数据的用户目录,您的移动应用程序/网站可以使用用户名和密码进行身份验证。

Cognito联合身份允许您联合来自Facebook、Google甚至以上Cognito用户池的用户,以获取AWS凭据以访问AWS资源。

从您的用例来看,您似乎希望从管理端创建和确认用户,这是adminCreateUser通过使用Cognito提供的功能。之后,用户可以使用您链接的教程中的示例6,使用用户名和密码进行登录。

您可以通过在初始化的CognitoUser上调用getUser()来创建一个空UserPool。

代码:

代码语言:javascript
复制
    user = userPool.getUser();
    AuthenticationDetails authenticationDetails = new AuthenticationDetails(email, password, null);
    user.authenticateUserInBackground(authenticationDetails, authenticationHandler);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48101827

复制
相关文章

相似问题

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