我尝试在身份验证后立即更新用户的属性。
Auth工作正常,我可以用它检索用户属性。
但问题是var cognitoUser = getUserPool().getCurrentUser();
返回null。如何检索当前用户以便我能够更新属性但不刷新浏览器?
也许另一个问题是,如何在不刷新浏览器的情况下使用accessToken在当前用户上运行函数?
var cognitoUser = getUserPool().getCurrentUser();
if (cognitoUser != null) {
cognitoUser.getSession(function(err, session) {
if ( err ) {
console.log(err);
return;
}else if( session.isValid() ){
updateUserAttribute( cognitoUser, 'custom:attr', attr )
}
});
}else{
console.log('Cognito User is null');
return;
}
答案 0 :(得分:0)
var cognitoUser = getUserPool().getCurrentUser();
如果正确初始化用户池,则应该返回最后一个经过身份验证的用户。验证成功后,我们将键入客户端ID的用户保存到本地存储。无论何时调用getCurrentUser,它都将从本地存储中检索该特定的最后一个经过身份验证的用户。令牌是键入该用户和客户端ID。成功进行身份验证后,它们也会保存到本地存储中。访问访问令牌应该只是:
cognitoUser.getSignInUserSession().getAccessToken().getJwtToken())
您可以将令牌直接用于CognitoIdentityServiceProvider客户端中公开的操作。
答案 1 :(得分:0)
这是一个相当古老的问题,所以您现在可能已经开始了,但我认为您需要使用userpoolId和clientID创建用户池。我不认为你可以调用getUserPool()而不知道那些在内存中已知和/或以某种方式可用的内容。例如:
function makeUserPool () {
var poolData = {
UserPoolId : "your user pool id here",
ClientId : "you client id here"
};
return new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
}
var userPool = makeUserPool();
var currAWSUser = userPool.getCurrentUser();
答案 2 :(得分:0)
getUserPool()。getCurrentUser()在本地存储上查找用户,如果返回null则是因为本地存储尚未设置用户。
要在本地存储上设置用户,我使用一个CognitoAuth实例来完成这项工作。
此解决方案使用的是Cognito托管UI。 在Cognito用户界面返回的回调网址上:
import {CognitoAuth} from 'amazon-cognito-auth-js';
var authData = {
UserPoolId: 'us-east-1_xxxxxx',
ClientId: 'xxxxxxx',
RedirectUriSignIn : 'https://examole.com/login',
RedirectUriSignOut : 'https://example.com/logout',
AppWebDomain : 'example.com',
TokenScopesArray: ['email']
};
var auth = new CognitoAuth(authData);
auth.userhandler = {
onSuccess: function(result) {
//you can do something here
},
onFailure: function(err) {
// do somethig if fail
}
};
//get the current URL with the Hash that contain Cognito Tokens tokens
var curUrl = window.location.href;
//This parse the hash and set the user on the local storage.
auth.parseCognitoWebResponse(curUrl);
然后,如果您调用getUserPool()。getCurrentUser(),则该值将不为空。