我将AWS Cognito Identity Pool配置为使用Cognito User Pool作为身份验证提供程序。
假设我在Cognito Identity Pool中拥有身份的身份ID(例如us-east-1:XXaXcXXa-XXXX-XXXX-XXX-XXXXXXXXXXXX),其中此身份具有Cognito用户池中用户的链接登录。
使用身份证,我如何获取链接的用户详细信息(电子邮件,电话,用户名)?
答案 0 :(得分:17)
您与Cognito联合身份服务交换以获取身份ID和凭据的ID令牌已具有所有用户属性。您无需额外拨打任何服务。
它是一个JWT令牌,您可以使用客户端上的任何库来解码值。您可以阅读this guide以获取有关Cognito用户池销售的令牌的更多信息。
或者,您也可以使用访问令牌来调用GetUser API,这将返回所有用户信息。
答案 1 :(得分:2)
我认为这对某人可能非常有帮助,因为我花了很多时间试图弄清楚如何仅使用UserAttributes
和accessToken
来获得region
(类似于{ {3}},但使用REST API(不使用aws-sdk)
您可以使用此HTTP请求将UserAttributes
与accessToken
一起使用。 (this)
Method: POST
Endpoint: https://cognito-idp.{REGION}.amazonaws.com/
Content-Type: application/x-amz-json-1.1
Content-Length: 1162 // Access Token bytes length
X-Amz-Target: AWSCognitoIdentityProviderService.GetUser
Body: {"AccessToken":"ACCESS_TOKEN"}
如果accessToken
有效,您应该收到类似以下的示例响应
{
"UserAttributes": [
{
"Name": "sub",
"Value": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
},
{
"Name": "email_verified",
"Value": "true"
},
{
"Name": "name",
"Value": "Jason"
},
{
"Name": "phone_number_verified",
"Value": "true"
},
{
"Name": "phone_number",
"Value": "+xxxxxxxxxxx"
},
{
"Name": "email",
"Value": "xxxx@gmail.com"
}
],
"Username": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"
}
答案 2 :(得分:0)
我遇到了类似的问题,经过太多的抓挠,我找不到找到细节的确切方法。我的用例是在android APP中获取详细信息。 在查看他们的AWSMobile客户端API代码之后。我在下面找到了它,并且正在我的工作中。
Log.i(TAG,“用户详细信息” + AWSMobileClient.getInstance()。getUserAttributes()。toString());
建议-如果您将它用于Android开发,请尝试使用AWSMobileclient,因为这是推荐用于开发的新库。
答案 3 :(得分:0)
AWS cognito-idp list-users有一个过滤器选项,使您可以基于属性进行过滤。 “ sub”是与您描述的身份ID匹配的属性。
例如在命令行上:
aws cognito-idp list-users --user-pool-id us-east-1_abcdFghjI --filter "sub=\":XXaXcXXa-XXXX-XXXX-XXX-XXXXXXXXXXXX\""
这也需要用户池ID,我怀疑您有。另外,我不知道在过滤大量用户时如何实现或如何执行此操作,但是我认为自定义属性无法在过滤器中使用,以暗示幕后存在某种形式的索引。
答案 4 :(得分:0)
苦苦挣扎了一段时间,使用Java API获得用户名的方式是:
identityManager.login(this, new DefaultSignInResultHandler() {
@Override
public void onSuccess(Activity activity, IdentityProvider identityProvider) {
...
String userName = ((CognitoUserPoolsSignInProvider) identityProvider).getCognitoUserPool().getCurrentUser().getUserId();
答案 5 :(得分:0)
我们可以初始化一个侦听器,它会侦听身份验证状态的变化,并允许我们访问发生的身份验证事件的类型,并根据该数据更新应用程序状态。
使用 Amplify,Hub 模块可以让我们非常轻松地做到这一点:
import { Hub } from 'aws-amplify';
Hub.listen('auth', (data) => {
const {payload} = data;
if (payload.event === 'signOut') {
console.log('signOut');
} else if (payload.event === 'signIn') {
console.log('A new auth event has happened: ', data.payload.data.username + ' has ' + data.payload.event);
}
});
答案 6 :(得分:-3)
使用这段代码
GetDetailsHandler detailsHandler = new GetDetailsHandler() {
@Override
public void onSuccess(CognitoUserDetails cognitoUserDetails) {
CognitoUserAttributes cognitoUserAttributes=cognitoUserDetails.getAttributes();
stringStringHashMap=new HashMap<>();
stringStringHashMap =cognitoUserAttributes.getAttributes();
userNumber=stringStringHashMap.get("phone_number");
e1.setText(userNumber);
Log.d("Response"," Inside DEATILS HANDLER");
// Store details in the AppHandler
AppHelper.setUserDetails(cognitoUserDetails);
// Trusted devices?
handleTrustedDevice();
// e1.setText(input.getText().toString());
}
@Override
public void onFailure(Exception exception) {
closeWaitDialog();
showDialogMessage("Could not fetch user details!", AppHelper.formatException(exception), true);
}
};
private void getDetails() {
AppHelper.getPool().getUser(username).getDetailsInBackground(detailsHandler);
}
答案 7 :(得分:-10)
$.getJSON('https://jsonplaceholder.typicode.com/photos',
function(data) {
$.each(data, function(i, f) {
$("ul").append('<li id=\"#imageGallery\"><a id=\"imager\" href="' + f.url + '"><img src="' + f.thumbnailUrl + '" alt="' + f.title + '"></a></li>');
});
$overlay = $('#overlay');
$image = $("#fullSize");
$('#imageGallery img').on('click', function(e) {
// the image clicked
e.preventDefault();
$imageLocation = $(this).parent().attr("href");
// get the parent of this which is the a href
$image.attr("src", $imageLocation).replace("http://", "https://");
//post URL into new image
$overlay.show();
})
});