本文主要是介绍Amazon Cognito用户身份池使用(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近公司做项目,需要用到 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?.jwtTokenAppHelper.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,就算登录成功了。
这篇关于Amazon Cognito用户身份池使用(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!