Additional resources
In this section, we create a custom signup form with email and password that includes:
You can clone the example signup form on CodePen and make edits, or follow along below.
The example form has the Userfront Core JS library added to the document, as described in the next section.
See the Pen by userfront (@userfront) on CodePen.
You can add the Userfront Core JS library by CDN or using npm.
You only need to do one of these.
Create your signup form with the elements you want to use.
In this case, we've added:
email
- required for signupaccount-name
- example of a custom fieldpassword
- required for signup with passwordpassword-verify
- optional, for checking the password before registering the user<form id="signup-form"> <div id="alert"></div>
<label for="email">Email address</label> <input type="email" id="email" />
<label for="account-name">Account name (custom field)</label> <input type="text" id="account-name" />
<label for="password">Password</label> <input type="password" id="password" />
<label for="password-verify">Verify password</label> <input type="password" id="password-verify" />
<button type="submit">Sign up</button></form>
button,input { display: block; margin-bottom: 10px;}
#alert { display: none; color: red; margin-bottom: 10px;}
The signup() method allows you to pass in data to sign up a user.
Our JavaScript needs to pass our form data into this method.
Userfront then does the following:
access.demo1234
// Sample: how to use Userfront.signup()Userfront.init("demo1234");Userfront.signup({ method: "password", email: "jane@example.com", password: "testmodepassword", data: { customData: "Some custom information", },});
In the example code here, we do the following:
formSignup()
method that calls Userfront.signup()
with the form valuesformSignup()
when the form is submitted// Initialize UserfrontUserfront.init("demo1234");
// 1. Reference the elements on the pagevar signupFormEl = document.getElementById("signup-form");var alertEl = document.getElementById("alert");var emailEl = document.getElementById("email");var accountNameEl = document.getElementById("account-name");var passwordEl = document.getElementById("password");var passwordVerifyEl = document.getElementById("password-verify");var googleButtonEl = document.getElementById("signup-google");
// 2. Signup with a username/email and passwordfunction formSignup(e) { // Prevent the form's default behavior e.preventDefault(); // Reset the alert to empty setAlert(); // Verify that the passwords match var password = passwordEl.value; var passwordVerify = passwordVerifyEl.value; if (password !== passwordVerify) { return setAlert("Password verification must match."); } // Call Userfront.signup() Userfront.signup({ method: "password", email: emailEl.value, password: password, data: { accountName: accountNameEl.value, }, }).catch(function(error) { setAlert(error.message); });}
// Set the alert element to show the messagefunction setAlert(message) { alertEl.innerText = message; alertEl.style.display = message ? "block" : "none";}
// 3. Add an event listener for the signup for submitsignupFormEl.addEventListener("submit", formSignup);
The form has a field for Account Name
, which is a custom field.
When we pass this to the Userfront.signup()
method under the data
object, it is saved to the user's record as user.data.accountName
.
Userfront.signup({ // ... data: { accountName: accountNameEl.value, },});
Userfront will verify that the password is the correct length and format, and we can additionally verify that the user has typed what they intended by having them type it twice.
This "passwords match" verification is performed before sending the information to Userfront.
var password = passwordEl.value;var passwordVerify = passwordVerifyEl.value;if (password !== passwordVerify) { return setAlert("Password verification must match.");}
Whenever the Userfront.signup()
method fails, we can catch
its error in the promise chain.
This error contains a message
property with what went wrong.
In this example, we use the setAlert()
method to display the error message inside of our alert element.
// Catch the errorUserfront.signup(...).catch(function(error) { setAlert(error.message);});
// Add the error message to the alert elementfunction setAlert(message) { alertEl.innerText = message; alertEl.style.display = message ? "block" : "none";}
To configure Single sign-on (SSO), first add the provider you want to use in the Userfront dashboard in the SSO tab.
The SSO flow is as follows:
Userfront.signup()
uuid
and token
login credentials in the URLUserfront.login()
to log in the user with the uuid
and token
Add an event listener to call
Userfront.signup({ method: "google" })
when the Google button is clicked. You can style the button however you like.
Other provider options like GitHub, LinkedIn, and Facebook are in the docs for signup().
Userfront.init("demo1234");var googleButtonEl = document.getElementById("signup-google");
// 4. Add an event listener for the google button clickgoogleButtonEl.addEventListener("click", function() { Userfront.signup({ method: "google" });});
Once the browser is redirected back to your login page after SSO approval, your application should call
Userfront.login({ method: "link" })
.
You can set up your JS to call this method automatically by checking whether the URL contains the token
and uuid
parameters.
If your original SSO signup call contained a redirect
parameter, it will be included in the URL and followed automatically.
// On your login page:
Userfront.init("demo1234");
// If the URL contains token & uuid params, log inif ( document.location.search.includes("token=") && document.location.search.includes("uuid=")) { Userfront.login({ method: "link" });}