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
Auth.signUp({
username: email,
password: password,
attributes: {
given_name: given_name,
family_name: family_name,
confirmed_email: false
},
})
{code: "SerializationException", name: "SerializationException", message: "class java.lang.Boolean can not be converted to an String"}
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/
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.
Most helpful comment
So what if we add a
Boolean
custom attribute to our cloudformation schema then realise that onlyString
andNumber
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.