Amazon Cognito用户身份池使用(一)
最近公司做项目,需要用到 Amazon Cognito 的身份池来管理用户信息,记录一下 Amazon Cognito 在使用的时候遇到的问题和使用方法。官方demo:https://github.com/awslabs/aws-sdk-android-samples准备需要在build.gradle中添加:compile 'com.amazonaws:aws-android-s...
最近公司做项目,需要用到 Amazon Cognito 的身份池来管理用户信息,记录一下 Amazon Cognito 在使用的时候遇到的问题和使用方法。
官方demo:https://github.com/awslabs/aws-sdk-android-samples
准备
需要在build.gradle中添加:
compile 'com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.6.20'
compile 'com.amazonaws:aws-android-sdk-core:2.6.20'
compile 'com.amazonaws:aws-android-sdk-iot:2.6.20'
compile 'com.amazonaws:aws-android-sdk-cognito:2.6.20'
compile 'com.amazonaws:aws-android-sdk-s3:2.6.20'
AndroidManifest.xml中也需要添加相应权限,就不多说了。
官方demo中Helper类:AppHelper.java
在登录时候就需要使用这个类。
首先要在这个配置自己身份池信息:
/**
* Add your pool id here
*/
public static final String userPoolId = "xxxxxxx";
/**
* Add your Identity Pool ID
*/
public static final String identityPoolId = "xxxxxxxxxx";
/**
* Add you app id
*/
private static final String clientId = "xxxxxxxxxxxx";
/**
* App secret associated with your app id - if the App id does not have an
* associated App secret,
* set the App secret to null.
* e.g. clientSecret = null;
*/
private static final String clientSecret = null;
配置完成之后就可以使用了。
登录
登录就是使用dfsdfsdf中方法就可以:
AppHelper.getPool().getUser(username).getSessionInBackground(authenticationHandler)
上面这句代码是kotlin写的,因为项目就是用kotlin写的,但是官方demo使用java写的,所以没有将官方demo中的java代码改成kotlin。
username就是用户名,那么authenticationHandler是什么?
就是获取身份认证的回调:
var authenticationHandler: AuthenticationHandler = object : AuthenticationHandler {
override fun onSuccess(cognitoUserSession: CognitoUserSession?, p1: CognitoDevice?) {
//登录成功回调
var jwtToken = cognitoUserSession?.idToken?.jwtToken
AppHelper.getPool().currentUser.getDetailsInBackground(detailsHandler)
}
override fun onFailure(p0: Exception?) {
//获取用户失败回调
}
override fun getAuthenticationDetails(authenticationContinuation: AuthenticationContinuation?, p1: String?) {
//获取用户信息成功回调
getUserAuthentication(authenticationContinuation, username)
}
override fun authenticationChallenge(p0: ChallengeContinuation?) {
}
override fun getMFACode(p0: MultiFactorAuthenticationContinuation?) {
}
}
注意到override方法中的注释了吧,所以成功之后并不是直接回调的onSuccess,而是回调的getAuthenticationDetails,那为什么要回调这个方法呢?想一想,我们自己在做登录操作的时候,是要输入用户名和密码的,在上面这些代码中并没有用到密码,getAuthenticationDetails回调只是服务器中有你这个用户了(username唯一),那么现在就才开始登录(使用密码)。
getUserAuthentication方法如下:
private fun getUserAuthentication(continuation: AuthenticationContinuation?, username: String?) {
if (username != null) {
AppHelper.setUser(username)
}
val authenticationDetails = AuthenticationDetails(this.username, password, null)
continuation?.setAuthenticationDetails(authenticationDetails)
continuation?.continueTask()
}
登录成功后就会回调authenticationHandler中的onSuccess方法,并获得jwtToken,就算登录成功了。
更多推荐
所有评论(0)