๐Ÿ“ง
Email Authentication
Authenticate via Email and Password.
Moralis allows you to authenticate your users using email and passwords. These profile details can be later linked with web3 wallets.

Sign Up with Username

It's also possible to authenticate without a wallet via username and password. This makes use of the built-in Moralis.User class.
This class extends Moralis.Object with some extra attributes:
  • username: the username for the user (required)
  • password: the password for the user (required on signup)
  • email: the email address for the user (optional)
Use **Moralis.User.signUp(username, password)**to create a new user
1
const user = new Moralis.User();
2
user.set("username", "my name");
3
user.set("password", "my pass");
4
user.set("email", "[email protected]");
5
โ€‹
6
// other fields can be set just like with Moralis.Object
7
user.set("phone", "415-392-0202");
8
try {
9
await user.signUp();
10
// Hooray! Let them use the app now.
11
} catch (error) {
12
// Show the error message somewhere and let the user try again.
13
alert("Error: " + error.code + " " + error.message);
14
}
Copied!
Note that we used thesignUpmethod, not thesavemethod. New Moralis.User's created with a username should always be created using thesignUpmethod. Subsequent updates to a user can be done by callingsave

Users in Database

This call will asynchronously create a new user in your Moralis Database. Before it does this, it also
  1. 1.
    Checks to make sure that both the username and email are unique.
  2. 2.
    It securely hashes the password in the cloud using bcrypt.
We never store passwords in plaintext, nor will we ever transmit passwords back to the client in plaintext.

Handle Sign Up Errors

If a signup isnโ€™t successful, you should read the error object that is returned however, in most cases, this happens because the username or email is already being used by another user. You should clearly communicate this to your users, and ask them to try a different username.
You are free to use an email address as the username and if so, simply ask your users to enter their email into the username property โ€” Moralis.User will work as normal. Weโ€™ll go over how this is handled in the reset password section.

Log In With Username

After signing up, you can allow users to login through the **logIn**method
1
const user = await Moralis.User.logIn("myname", "mypass");
2
// Do stuff after successful login.
Copied!
By default, the SDK uses the GET HTTP method. If you would like to override this and use a POST HTTP method instead, you may pass an optional boolean property in the options argument with the key usePost.
1
const user = await Moralis.User.logIn("myname", "mypass", { usePost: true });
2
// Do stuff after successful login.
Copied!

Verify Emails

To use this feature, first Setup Email Serviceโ€‹
Enabling email verification in an applicationโ€™s settings allows the application to reserve part of its experience for users with confirmed email addresses.
Email verification adds the emailVerified key to the Moralis.User object. When a Moralis.Userโ€™s email is set or modified, emailVerified is set to false. Moralisthen emails the user a link which will set emailVerified to true.
There are three emailVerified states to consider:
  1. 1.
    true - The user confirmed his or her email address by clicking on the link Moralis emailed them. Moralis.Users can never have a true value when the user account is first created.
  2. 2.
    false - The user did not confirm his/her email address by clicking the link Moralis emailed them. If emailVerified is false, consider calling fetch on the Moralis.User.
  3. 3.
    undefined (missing)- This Moralis.User was created when email verification was not set up or Moralis.User does not have an email when signing up.
User class in Moralis Database

Reset Password

To use this feature, first Setup Email Serviceโ€‹
As you introduce passwords into a system, users will forget them. In such cases, our library provides a way to let them securely reset their password by sending an email with a reset link.
To kick off the password reset flow, ask the user for their email address, and call:
1
Moralis.User.requestPasswordReset("[email protected]")
2
.then(() => {
3
// Password reset request was sent successfully
4
})
5
.catch((error) => {
6
// Show the error message somewhere
7
alert("Error: " + error.code + " " + error.message);
8
});
Copied!
This will attempt to match the given email with the userโ€™s email or username field, and will send them a password reset email. By doing this, you can opt to have users use their email as their username, or you can collect it separately and store it in the email field.
The flow for password reset is as follows:
  1. 1.
    User requests that their password be reset by typing in their email.
  2. 2.
    Moralis sends an email to their address, with a special password reset link.
  3. 3.
    User clicks on the reset link and is directed to a special Moralis page that will allow them to type in a new password.
  4. 4.
    User types in a new password. Their password has now been reset to a value they specify.
Note that the messaging in this flow will reference your app by the name that you specified when you created this app on Moralis.

Tutorial

You can connect your Moralis app with Sendgrid email service in order to send verification emails. The video below shows how to:
  • Setting up email service (Sendgrid) with Moralis
  • Signing up users with username and password
  • Sending custom welcome emails upon creating new profiles
  • Verifying emails for users
  • Reset passwords for signed-up users
Moralis User Email Verification using Sendrid