管理员如何更新其他用户属性?AdminUpdateUserAttributes该如何使用
用户属性更新操作方案说明
操作权限选择建议
首先明确你当前用的Auth.updateUserAttributes是普通用户端API,仅允许用户修改自身的属性,无法修改其他用户的属性,且你当前的写法存在错误:该方法不需要传入username作为第一个参数,默认会读取当前登录用户的凭证修改对应信息。
你可以根据以下场景选择操作方式:
- 如果仅需要修改当前登录账号(也就是管理员自己)的属性,或者开放给所有用户自行修改个人信息,直接用
Auth.updateUserAttributes即可,不需要用到管理员API,修正后的前端代码如下:
const updateUser = async () => { await Auth.updateUserAttributes({ 'email': email, 'custom:phonenumber': phonenumber, 'custom:company': company }) } // 状态定义保持不变即可 const [email, setEmail] = useState('') const [phonenumber, setPhonenumber] = useState('') const [company, setCompany] = useState('')
- 如果是管理员需要修改其他任意用户的属性,就必须使用
AdminUpdateUserAttributes方法,该方法属于管理员专属API,需要拥有对应Cognito用户池的操作权限才能调用。
AdminUpdateUserAttributes 使用说明
该方法属于AWS Cognito的服务端API,禁止直接在前端暴露凭证调用,所有调用请求需要经过后端鉴权,确认操作人确实有管理员权限后再执行,Node.js后端调用示例如下:
// 引入AWS SDK Cognito 依赖 const { CognitoIdentityProviderClient, AdminUpdateUserAttributesCommand } = require("@aws-sdk/client-cognito-identity-provider"); // 初始化Cognito客户端,需提前配置好有权限的IAM凭证 const client = new CognitoIdentityProviderClient({ region: "你的Cognito用户池所在区域" }); /** * 管理员更新指定用户的属性 * @param {string} targetUsername 要修改的目标用户的用户名/用户ID * @param {string} email 新的邮箱 * @param {string} phonenumber 新的自定义手机号 * @param {string} company 新的自定义公司 */ const adminUpdateTargetUser = async (targetUsername, email, phonenumber, company) => { const params = { UserPoolId: "你的Cognito用户池ID", Username: targetUsername, UserAttributes: [ { Name: "email", Value: email }, { Name: "custom:phonenumber", Value: phonenumber }, { Name: "custom:company", Value: company } ] }; const command = new AdminUpdateUserAttributesCommand(params); await client.send(command); };
如果你使用Amplify框架,可以开启官方的AdminQueries功能,配置好管理员权限组后,前端直接调用封装好的管理员接口即可,无需自行编写后端逻辑。
内容的提问来源于stack exchange,提问作者Jukka Koivu
相关产品推荐
相关产品推荐

