web-dev-qa-db-fra.com

Amazon Cognito "Un client a tenté d'écrire un attribut non autorisé"

J'utilise le SDK JavaScript pour AWS Cognito, et il y a quelques attributs personnalisés que je n'arrive pas à enregistrer et je ne vois pas pourquoi.

Les attributs de problème sont des champs de chaîne modifiables comme suit:

custom: role
custom: recruitingrole
custom: title

D'autres champs personnalisés dans la même demande semblent mettre à jour OK. Plus précisément, ceux-ci semblent fonctionner:

custom:division
custom:linkedin
custom:location
custom:bio

Lorsque je soumets via le SDK, cela est retourné:

{"__type": "NotAuthorizedException", "message": "Un client a tenté d'écrire un attribut non autorisé"}

Voici les données qui sont envoyées, comme indiqué dans la sortie réseau de la console développeur Chrome:

{
    "AccessToken": "",
    "UserAttributes": [{
        "Name": "name",
        "Value": "Steve Austin"
    }, {
        "Name": "custom:company",
        "Value": "OSI"
    }, {
        "Name": "custom:division",
        "Value": "Bionics"
    }, {
        "Name": "custom:recruitingrole",
        "Value": "other"
    }, {
        "Name": "custom:linkedin",
        "Value": "http://www.linkedin.com"
    }, {
        "Name": "custom:location",
        "Value": "Mexico City, Mexico City, Mexico"
    }, {
        "Name": "custom:bio",
        "Value": "A man barely alive."
    }]
}

Quelqu'un peut-il suggérer pourquoi je ne peux pas enregistrer ces attributs?

merci

29
Duke Dougal

Bien sûr, la réponse est devenue claire dès que j'ai fini de poster sur StackOverflow.

Le problème était que je n'avais pas défini d'autorisations pour ces attributs dans l'application associée au pool d'utilisateurs. La documentation doit indiquer clairement cette exigence lorsqu'elle traite des attributs personnalisés.

enter image description here

65
Duke Dougal

Il suffit de mettre en surbrillance le réponse de @ mvandillen :

General settings -> App clients -> Show details -> Set attribute read and write permissions link

25
Martin Rázus

Pour tous ceux qui butent sur cette question:

Comme les autres l'ont suggéré, vous devez activer les attributs inscriptibles. Mais si cela ne fonctionne pas, assurez-vous d'utiliser le custom: préfixe:

await Auth.signUp({
      username: email,
      password: password,
      attributes: {
        'custom:firstName': firstName,
        'custom:lastName': lastName,
        'custom:countryCode': countryCode
      }
    })
3
Christiaan Maks

En utilisant Amazon.Extensions.CognitoAuthentication dans ASP.NET Core, vous devez ajouter:

var user = _pool.GetUser(model.Email)
user.Attributes.Add("name", model.Name);

Ici name est l'attribut personnalisé

0
Adrita Sharma