Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

示例:处理使用适用于 Android 的 移动软件开发工具包中的 AdminCreateUser API 创建的用户

Amazon Cognito 您的用户池允许管理员创建新用户并邀请用户登录。用户必须在首次登录时设置自己的密码。此外,用户必须在首次登录时为尚未具有值的任何必需属性提供值。

适用于 Android 的 移动软件开发工具包 (版本 2.3.2 及更高版本) 支持此功能。要在应用程序中支持此功能,您必须实施 AuthenticationChallenge 回调方法。这些用户的用户身份验证流程未更改。但是,进行初始密码验证后,开发工具包将调用 AuthenticationChallenge 回调,您可以实施该回调以读取用户的新密码。然后,您可以允许用户设置必需属性并更改管理员已设置的用户属性。

传递到 AuthenticationChallenge 回调方法的延续对象属于 NewPasswordContinuation 类型。NewPasswordContinuation 类是 ChallengeContinuation 的子项。ChallengeContinuation 类支持更轻松地访问质询属性。

在用户身份验证过程中调用 AuthenticationChallenge 回调时,请先检查 Challenge name。质询名称 NEW_PASSWORD_REQUIRED 表示用户在管理员为其创建账户后第一次尝试登录。要获取质询名称,请调用 continuation.getChallengeName

要完成登录过程,用户必须设置新密码,并针对创建或更新用户池时标记为必填项的用户属性,提供所有缺失的值。要获取所有必需属性的列表,请调用 continuation.getRequiredAttributes。要获取管理员已设置的属性和值,请调用 continuation.getCurrentUserAttributes

分别调用 continuation.setPasswordcontinuation.setUserAttribute,以设置用户的新密码和属性 (包括必需属性)。

调用 continuation.continueTask 以完成登录过程。

@Override public void authenticationChallenge(final ChallengeContinuation continuation) { // Check the challenge name if("NEW_PASSWORD_REQUIRED".equals(continuation.getChallengeName()) { // A new user is trying to sign in for the first time after // admin has created the user’s account // Cast to NewPasswordContinuation for easier access to challenge parameters NewPasswordContinuation newPasswordContinuation = (NewPasswordContinuation) continuation; // Get the list of required parameters List<String> requiredAttributes = newPasswordContinuation.getRequiredAttributes() // Get the current user attributes Map<String, String> currUserAttributes = newPasswordContinuation.getCurrentUserAttributes(); // Prompt user to set a new password and values for required attributes // Set new user password newPasswordContinuation.setPassword(); // Set user attributes newPasswordContinuation.setUserAttribute(attributeName, attributeValue); // Set user attributes newPasswordContinuation.setUserAttribute(anotherAttribute, valueOfAnotherAttribute); // Allow the sign-in to complete newPasswordContinuation.continueTask(); } // Set the challenge responses // Call continueTask() method to respond to the challenge and continue with authentication. }