Amplify-js: SignUp with Custom Attributes throws errors

Created on 29 Mar 2019  路  4Comments  路  Source: aws-amplify/amplify-js

Describe the bug
I have created a Cognito User Pool and Identity Pool via Cloud Formation templates using the Serverless Framework. The schema looks like this:

      Schema:
        - Name: family_name
          AttributeDataType: String
          Mutable: true
          Required: true
        - Name: given_name
          AttributeDataType: String
          Mutable: true
          Required: true
        - Name: confirmed_email
          AttributeDataType: Boolean
          Mutable: true
          Required: false

Signup was working fine until I added the confirmed_email attribute and added it to signup. This results in a SerializationException being raised. The only way I can create the user with the custom attribute is to append custom to the key so that confirmed_email becomes custom:confirmed_email and the boolean will only work as a string.

To Reproduce

  1. Use above schema to add attributes to a Cognito User Pool. Then attempt to sign up a user with the following:
Auth.signUp({
      username: email,
      password: password,
      attributes: {
        given_name: given_name,
        family_name: family_name,
        confirmed_email: false
      },
 })
  1. This will result in the following error:
{code: "SerializationException", name: "SerializationException", message: "class java.lang.Boolean can not be converted to an String"}
  1. Now sign up a user with this code:
Auth.signUp({
      username: email,
      password: password,
      attributes: {
        given_name: given_name,
        family_name: family_name,
       'custom: confirmed_email': 'false'
      },
 })

You should not observe the error and the user should be created successfully.

Expected behavior
I expect Auth.signUp() to accept custom attributes as a regular javascript object as shown here: https://aws.amazon.com/blogs/mobile/aws-amplify-adds-support-for-custom-attributes-in-amazon-cognito-user-pools/

Auth pending-close-response-required question

Most helpful comment

So what if we add a Boolean custom attribute to our cloudformation schema then realise that only String and Number are supported?

We can't delete the attribute.
We can't modify the attribute.

I want to convert this into a string or remove it. It's broken my authentication flow and there doesn't appear to be a solution to fix this. Am I supposed to delete my amplify backend infrastructure and then amplify push from new?

This is a little nutty if that is the only solution.

All 4 comments

Custom attributes can only be defined as a string or a number, from: https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes

Closing this issue as it appears to have been answered.

I ran into the same issue (SerializationException), although my value is defined as a Number in the Cognito console, but I had to wrap it in quotes within my app. This is confusing and it the error message is somewhat helpful in retrospect, but not at all intuitive.

My custom attribute is called onboarding with a type of Number. The Cognito console renamed it to custom:onboarding.

In my sign up method, I add:
attributes: { 'custom:onboarding': '0' }

So what if we add a Boolean custom attribute to our cloudformation schema then realise that only String and Number are supported?

We can't delete the attribute.
We can't modify the attribute.

I want to convert this into a string or remove it. It's broken my authentication flow and there doesn't appear to be a solution to fix this. Am I supposed to delete my amplify backend infrastructure and then amplify push from new?

This is a little nutty if that is the only solution.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

callmekatootie picture callmekatootie  路  3Comments

TheRealRed7 picture TheRealRed7  路  3Comments

ldgarcia picture ldgarcia  路  3Comments

karlmosenbacher picture karlmosenbacher  路  3Comments

oste picture oste  路  3Comments