Amazon web services AWS Cognito Google登录覆盖用户池中的映射属性值

Amazon web services AWS Cognito Google登录覆盖用户池中的映射属性值,amazon-web-services,amazon-cognito,google-signin,aws-amplify,Amazon Web Services,Amazon Cognito,Google Signin,Aws Amplify,特定于SocialIDP(谷歌登录)的问题: 我为我的用户提供更改其“首选\u用户名”的选项。当他们这样做时,我的cognito用户池中的preferred_username属性就会更新。 然而,当他们再次登录(谷歌登录)时,Cognito不会保留它存储在“首选用户名”池中的值。它会被Google为该映射属性所拥有的任何内容覆盖。 有人能帮忙吗?下面是我更新用户池属性的函数 export const updateCognitoUserAttributes = async (user, attri

特定于SocialIDP(谷歌登录)的问题: 我为我的用户提供更改其“首选\u用户名”的选项。当他们这样做时,我的cognito用户池中的preferred_username属性就会更新。 然而,当他们再次登录(谷歌登录)时,Cognito不会保留它存储在“首选用户名”池中的值。它会被Google为该映射属性所拥有的任何内容覆盖。 有人能帮忙吗?下面是我更新用户池属性的函数

export const updateCognitoUserAttributes = async (user, attributes) => {
return await Auth.updateUserAttributes(user, {
    ...attributes.appSpecificCode
    ? { 'custom:appSpecificCode': attributes.appSpecificCode}
    : { 'email': attributes.email,
        'family_name': attributes.family_name,
        'given_name': attributes.given_name,
        'preferred_username': attributes.preferred_username
    }
})
    .then(res => {
        return res;
    })
    .catch(err => {
        return err;
    });
}
这里有3张图片显示了更改前、更改后的首选_用户名,然后在我注销并重新登录后,请注意它已更改回以前的状态。我可以理解为什么会发生这种情况,因为它被映射到谷歌的“name”属性,但放大文档表明这个值是可变的(事实上,如图所示,在池中是可变的),但这种变化应该是永久的?如果每次用户登录时都会覆盖这些属性,那么允许更改这些属性有什么意义?(被覆盖的不仅仅是首选用户名,任何映射到google属性的属性都会被覆盖)。谢谢你的帮助


我想没有什么可以做的了。刚刚在amplify github上发现了同样的问题。简而言之,从amplify文档中:

当用户登录到应用程序时,AmazonCognito必须能够更新映射的用户池属性。当用户通过身份提供者登录时,AmazonCognito使用来自身份提供者的最新信息更新映射属性。AmazonCognito更新每个映射属性,即使其当前值已经匹配最新信息。如果amazoncognito无法更新该属性,它将抛出一个错误。要确保Amazon Cognito可以更新属性,请检查以下要求:


叹气。

我以前没有真正面对过这种情况,但我会尝试看看是否可以使用授权前/授权后lambda触发器作为一个肮脏的修复。本质上,我只是检查用户是社交IdP还是普通cognito,以及前者是否转到我们的DB以获得首选的\u用户名(因为我们还将用户数据保留在从cognito获得的数据之外),甚至不用麻烦用社交IDP的任何编辑属性更新cognito用户池。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-