amplify-js: How to verify if a user with a given email already exists in User Pool?
Do you want to request a feature or report a bug?
Question
What is the expected behavior?
Check is user exists
example
Is there such a method?
Auth.verifyIfUserExists({
email: 'foo@bar.com'
})
.then(res => {
// user with this email already exists
})
Because now I can find out if a user exists ONLY during signUp action. But I want to check it before I do signUp. Because if a user doesn’t exist it will be created right off the bat. And it is not what expected
Auth.signUp({
username,
password,
attributes: {
},
})
.then(data => console.log(data))
.catch(err =>{
// User exists !!
});
About this issue
- Original URL
- State: open
- Created 6 years ago
- Reactions: 31
- Comments: 45 (2 by maintainers)
I looked at the amplify source code.
Auth.confirmSignup()callscognitoUser.confirmRegistration(code, forceAliasCreation)which then calls this API: https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.htmlThe right way to do this (without signIn & signOut) according to the project contributors seems to be this:
@wzup The sign-in workaround might work just because User Pools require passwords that are 6-characters are longer so in practice, there will never be a user account whose password is ‘123’.
@haverchuck However, even if this workaround works, it’s really bad that the API doesn’t support checking the existence of a user name directly. I’ve been working with Cognito for two years and this feature already exists as a request, but hasn’t been implemented yet, along with the ability for an administrator to reset an account’s password. The combination of these two problems makes it quite difficult to build enterprise applications.
I did:
@PavolHlavaty I was experiencing the same issue as you until reading these docs: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-managing-errors.html
Basically the
PreventUserExistenceErrorsoption has to be disabled (ie. enable user existence errors) for your app client, where it was enabled by default in my config.It can be changed in Cognito console with: User pools > Selecting your user pool > General settings > App clients > Show Details > Security configuration > Legacy > Save app client changes
With my default setup of amplify I have two app clients (native and web), and ended up changing it for both of them, although don’t know if it that was necessary.
@michelmob @haverchuck
But what if credentials are correct?
Then a user that wants to sign up will be suddenly signed in instead.
This is definitely bad experience from aws-amplify.
This is an abstraction of cognito using aws amplify.
Sent from my iPhone
@haverchuck
Here is why requested method I ask for is important.
With current authflow we have to signin and then signout a user just to check if an email (username) already exists:
Any implementations yet? the feature request happened 5 years ago now.
+1 in seeing URL.host is not implemented, what was the fix you found for that?
The only way I’ve found to do this consistently in a way that’s not too much of a hack is the following:
The consequence of this is email addresses must be unique per account.
The reason this will work and not getUser is that getUser only returns accounts with verified email address. To be complete you need to check to see if the user has tried to register for an account in the past but never confirmed their email address.
Hope this helps a bit.
Clinton
Came across this issue and @heri16’s solution worked perfect. If you’re looking for something to just paste in and go, here’s a snippet:
To use:
When I try to use solution proposed by @heri16. I always get error code
ExpiredCodeExceptionwith messageInvalid code provided, please request a code again.Is there an update on this issue? Tried all the solutions above and nothing worked. This issue has been open for too long. Will Amazon ever consider implementing this feature?
@michelmob , thank you.
One question though. What is
thisin your example? Where does.cognitolive?@akeditzz if you are using mobile number remember to use e164 format only. Country specific phone strings will give you issues
@akeditzz it’ll work, i use mobile number personally but have tested both. but same rules apply as for email. if signed up it needs to be verified or it won’t work properly. Personally in my case if something goes wrong and user wasn’t able to confirm, i just make him signup again with another username (random uuid in my case). So there will be two accounts created in cognito pool but only one will be confirmed and thus used for future login.
@wzup
There is not function that does this and only this; however, I think if you use the confirmSignUp function and are using email as an alias you will get back an AliasExistsException error.
In any case I am marking this as a feature request, as it seems useful.
Thanks for your feedback.