我正在开发一个新项目,这是我第一次同时使用Vue js和AWS Cognito。我发现Cognito文档很难找到,或者根本就找不到。
在Vue应用程序中,我正在使用Amplify来处理所有运行良好的用户管理。
在用户池中,我添加了2个自定义属性:
在Vue应用程序中,我将报价请求发布到.net核心api,其中包含各种详细信息以及登录用户的cognito用户名以及名字和姓氏:
{
"details": "all kinds of quote details",
"user": {
"cognitoUsername": "fd17f624-cf31-11e9-904a-88d7f67d5c52",
"firstName": "Carel",
"lastName": "Nel"
}
}
使用Amazon.Extensions.CognitoAuthentication
库,我可以查询其所有属性的认知用户记录:
cognitoUser = await _pool.FindByIdAsync(model.User.CognitoUsername);
接下来,我的计划是在通过所有其他各种验证检查之后,通过此API post方法更新池中的custom:first_name
和custom:last_name
属性。如果尝试更新,则会出现以下错误:
if (attributesChanged)
{
await cognitoUser.UpdateAttributesAsync(userAttributes);
// Error: "Database Failure - User is not authenticated."
}
为了对此进行一点测试,我尝试了以下方法,然后起作用了:
if (attributesChanged)
{
await _signInManager.PasswordSignInAsync(cognitoUser, "password", false, false);
await cognitoUser.UpdateAttributesAsync(userAttributes);
}
因此,如果我使用密码登录用户,则可以成功更新认知池中的自定义属性。但是,我不想这样做。是否可以在API上设置某种管理员用户配置,以使我可以在不登录特定用户的情况下更新用户池记录,或者我可以(应该)为登录用户传递一些jwt令牌吗?从Vue应用程序到API,并以某种方式使用它来确保身份验证?
答案 0 :(得分:1)
您需要为应用客户端分配aws.cognito.signin.user.admin
范围。然后,您应该能够通过该用户修改用户属性。
https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html
检查有关aws.cognito.signin.user.admin
范围的“允许的OAuth范围”部分。