android - AWS cognito android如何使用用户名,密码进行手动登录流程
问题描述
我正在尝试使用 Amazon Cognito 身份验证构建 Android 应用程序,但不想使用默认 AuthUI 登录用户。
但是,我找不到任何关于如何做到这一点的参考资料、示例、示例、博客。
& 我可以使用默认的 AuthUI 成功登录。
现在,要使用用户名、密码登录,我从这个参考中创建了一个这样的身份验证处理程序 - https://aws.amazon.com/blogs/mobile/using-android-sdk-with-amazon-cognito-your-user-游泳池/
AuthenticationHandler handler = new AuthenticationHandler() {
@Override
public void onSuccess(CognitoUserSession userSession, CognitoDevice newDevice) {
}
@Override
public void getAuthenticationDetails(AuthenticationContinuation authenticationContinuation, String userId) {
AuthenticationDetails authenticationDetails = new AuthenticationDetails(mEmailEditText.getText().toString(), mPasswordEditText.getText().toString(), null);
authenticationContinuation.setAuthenticationDetails(authenticationDetails);
authenticationContinuation.continueTask();
}
@Override
public void getMFACode(MultiFactorAuthenticationContinuation continuation) {
}
@Override
public void authenticationChallenge(ChallengeContinuation continuation) {
}
@Override
public void onFailure(Exception exception) {
}
};
那么,现在如何调用这个处理程序来获取 Cognito 用户会话和详细信息
任何人都可以分享适当的指示来完成这项工作或以任何其他方式完成这项工作吗?
解决方案
那么,现在如何调用这个处理程序来获取 Cognito 用户会话和详细信息
您需要先初始化CognitoUser
对象并调用getSessionInBackground()
检查下面login()
的代码,使用用户名、密码调用登录。并确保build.gradle
导入所需的 AWS 库:
import com.amazonaws.mobile.client.AWSMobileClient;
import com.amazonaws.mobile.config.AWSConfiguration;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoDevice;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUser;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserPool;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.CognitoUserSession;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.AuthenticationDetails;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.ChallengeContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.continuations.MultiFactorAuthenticationContinuation;
import com.amazonaws.mobileconnectors.cognitoidentityprovider.handlers.AuthenticationHandler;
// ...
private EditText mEmailEditText;
private EditText mPasswordEditText;
private String email;
private String password;
// ...
private void login()
{
email = mEmailEditText.getText().toString(); // email
password = mPasswordEditText.getText().toString(); // password
if (email.isEmpty() || password.isEmpty())
{
return;
}
final AWSConfiguration awsConfiguration = AWSMobileClient.getInstance().getConfiguration();
final CognitoUserPool userPool = new CognitoUserPool(this, awsConfiguration);
final CognitoUser user = userPool.getUser(email); // Create a User Object with a UserId
user.getSessionInBackground(authenticationHandler);
}
private AuthenticationHandler authenticationHandler = new AuthenticationHandler()
{
@Override
public void onSuccess(final CognitoUserSession userSession, final CognitoDevice newDevice)
{
// Login success, do startActivity() or other thing
}
@Override
public void getAuthenticationDetails(final AuthenticationContinuation continuation, final String userId)
{
if (userId != null)
{
email = userId;
}
final AuthenticationDetails authDetails = new AuthenticationDetails(email, password, null);
continuation.setAuthenticationDetails(authDetails);
continuation.continueTask();
}
@Override
public void getMFACode(final MultiFactorAuthenticationContinuation continuation)
{
}
@Override
public void authenticationChallenge(final ChallengeContinuation continuation)
{
}
@Override
public void onFailure(final Exception exception)
{
}
};
推荐阅读
- python - 在迭代时将键添加到 int 的 defaultdict
- c# - 为 WCF 服务启用 HTTPS 流量。将流量 http 更改为 https 的问题
- postgresql - 带有 Postgres 的 AWS RDS:是否配置了 OOM 杀手
- ms-access - 将工作联合查询放入子查询会导致 JOIN 语法错误
- python - Pandas:从 DataFrame 分配 MultiIndex 列
- c# - JetBrain Rider:在调试期间查看 List<>
- python - 如何从依赖解析器的输出中生成树?
- c - 在C中的链表中打印节点的十六进制内存地址
- javascript - 多个按钮,将使用 javascript 中的一个函数将一个文本字段更改为该按钮的值
- spring-webflux - WebFlux:如何为不同的 RestController 应用不同的 WebFilters 集