web-dev-qa-db-ja.com

Amazon Cognito「クライアントが不正な属性を書き込もうとした」

私はAWS CognitoのJavaScript SDKを使用していますが、保存できないようで、その理由がわからないカスタム属性がいくつかあります。

問題属性は、次のような可変文字列フィールドです。

custom: role
custom: recruitingrole
custom: title

同じリクエストの他のカスタムフィールドはOKに更新されるようです。具体的には、これらは動作するようです:

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

SDK経由で送信すると、これが返されます。

{"__type": "NotAuthorizedException"、 "message": "クライアントが不正な属性を書き込もうとしました"}

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."
    }]
}

これらの属性に保存できない理由を誰でも提案できますか?

ありがとう

29
Duke Dougal

もちろん、答えはStackOverflowに投稿した瞬間に明らかになりました。

問題は、ユーザープールに関連付けられたアプリでこれらの属性のアクセス許可を設定していなかったことです。ドキュメントでは、カスタム属性について説明する場所でこの要件を明確にする必要があります。

enter image description here

65
Duke Dougal

@ mvandillen からの回答を強調表示するだけです:

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

25
Martin Rázus

この質問につまずいた人には:

他の人が提案したように、書き込み可能な属性を有効にする必要があります。それでもうまくいかない場合は、custom:プレフィックス:

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

ASP.NET CoreでAmazon.Extensions.CognitoAuthenticationを使用して、次を追加する必要があります。

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

ここでnameはカスタム属性です

0
Adrita Sharma