register( )
Registers a new site member.
Description
The register()
function returns a Promise that resolves to a RegistrationResult
object when the member is either registered or pending registration.
Note: The member data in the resolved promise will only include custom fields from your site's contacts if they are added to your site Members in your site's dashboard.
The specified password
must be between 4 and 100 ASCII characters.
Email verification
You may want to check that a new member is using their own email address, not using someone else's or a fake email address.
You can require members to verify their email address once they've signed up.
You can configure these setting manually in your site's dashboard, or you can enable email verification through code. This example includes email verification through code.
Automatic vs. Manual Approval
The register()
function behaves differently depending on your site's
member signup settings.
Details are outlined in the following table:
Signup Setting | Result |
---|---|
Everyone who signs up (automatic approval) |
|
Only people who I approve manually (manual approval) |
|
When your site's member signup settings are set to automatic approval, calling
register()
from wix-members-frontend
(in page code) is as secure as calling
register()
from wix-members-backend in backend code,
unless you are implementing custom site registration using Velo forms.
However, when registration is set to manual approval,
calling register()
from wix-members-backend
allows you to build more secure approval flows
by keeping tokens hidden from the frontend.
Note: Registering a member in the backend always creates a new contact, even if a contact with the specified
register()
from the frontendwix-members-frontend
module.
Syntax
function register(email: string, password: string, [options: RegistrationOptions]): Promise<RegistrationResult>
register Parameters
NAME
TYPE
DESCRIPTION
Email address the new member will use to log in.
Password to assign to the new site member. Must be 4 to 100 ASCII characters.
Registration options.
Returns
Fulfilled - When the member is registered. Rejected - Error message.
Return Type:
NAME
TYPE
DESCRIPTION
Registration status.
One of:
"PENDING"
: The member must be approved before they can log in to the site."ACTIVE"
: The member is approved and can log in to the site.
Token for logging in the current visitor
as a site member with the
applySessionToken()
function from wix-members-frontend.
sessionToken
is only returned when approval is automatic and the returned status
is "ACTIVE"
. See Automatic vs. Manual Approval.
Token for approving the member
with the approveByToken()
function. approvalToken
is safe to pass via email or from page code to
backend code.
approvalToken
is only returned when manual approval is required and the returned status
is "PENDING"
. See Automatic vs. Manual Approval.
The registered member.
Was this helpful?
This example contains custom fields: "Hobby" and "Favorite Meal".
1import { authentication } from 'wix-members-backend';23/* Sample options value:4 * {5 * contactInfo: {6 * firstName: 'Javier',7 * lastName: 'Doe',8 * hobby: 'Basketball,9 * "favorite-meal": 'Pasta'10 * },11 * privacyStatus: 'PUBLIC'12 * }13 */1415export function myRegisterMemberFunction(email, password, options) {16 return authentication.register(email, password, options)17 .then((registrationResult) => {18 return registrationResult;19 })20 .catch((error) => {21 console.error(error);22 })23}2425/* Promise resolves to:26 * {27 * "member": {28 * "_id": "efaaf13f-934e-4449-b0c2-304030767671",29 * "createdDate": "2021-08-01T12:28:42Z",30 * "updatedDate": "2021-08-01T12:28:41.847Z",31 * "status": "UNKNOWN",32 * "contactId": "efaaf13f-934e-4449-b0c2-304030767671",33 * "profile": {34 * "nickname": "Javier Doe",35 * "slug": "javierdoe"36 * },37 * "privacyStatus": "UNKNOWN",38 * "activityStatus": "UNKNOWN"39 * },40 * "status": "PENDING",41 * "approvalToken": "JWS.eyJraWQiOiJSc012MmV3MiIsImFsZyI6IkhTMjU2In0.eyJkYXRhIjoie1wiaWRcIjpcImVmYWFmMTNmLTkzNGUtNDQ0OS1iMGMyLTMwNDAzMDc2NzY3MVwiLFwiY29sbGVjdGlvbklkXCI6XCI5YmVjNThlNi02NDExLTQ5OTEtOGU1ZC0wYWRhOTE4MmI5NWVcIn0iLCJpYXQiOjE2Mjc4MjA5MjEsImV4cCI6MTYyNzkyODkyMX0.zOuE8ZXRBQT4tPPFqvseE8xKm6kHrmHG3Lrndz7l7Ng"42 * }43 */
This example demonstrates a common 3rd-party approval flow.
The backend code calls a 3rd-party service that determines whether the member is approved.
If approved, the register()
function is called from backend code,
the registration is approved,
and a session token is returned to the calling page code.
If rejected, the blockByEmail()
function is called.
1/*******************************2 * Backend code - register.jsw *3 *******************************/4import { authentication } from 'wix-members-backend';5import { approveBy3rdParty } from 'backend/some-backend-module';67export async function doRegistration(email, password, firstName, lastName) {89 // Call a 3rd-party API to check if the member is approved.10 const isApproved = await approveBy3rdParty(email, password);1112 // If member is approved by 3rd party, register and approve with the Wix site13 if (isApproved === true) {14 const options = {15 contactInfo: {16 firstName: firstName,17 lastName: lastName18 }19 };2021 // Register the member22 const registration = await authentication.register(email, password, options);23 const approvalToken = registration.approvalToken;24 console.log('Member is now registered with the site and pending approval');2526 // Approve the member and get session token, to be used to log in the member client-side27 const sessionToken = await authentication.approveByToken(approvalToken);28 console.log('Member is now approved, but not logged in');2930 return {31 approved: true,32 sessionToken: sessionToken33 };3435 } else {36 // If not approved by the 3rd party3738 await authentication.blockByEmail(email);39 console.log('Member not approved by 3rd-party SSO. Blocking from Wix site.');4041 return { approved: false };42 }43}444546/*************47 * Page code *48 *************/49import { authentication } from 'wix-members-frontend';50import { doRegistration } from 'backend/register';5152// ...5354$w('#register').onClick(() => {5556 const email = $w('#email').value;57 const password = $w('#password').value;58 const firstName = $w('#firstName').value;59 const lastName = $w('#lastName').value;6061 doRegistration(email, password, firstName, lastName)62 .then((result) => {63 if (result.approved) {64 // Log the member in65 console.log('Logging in...');66 authentication.applySessionToken(result.sessionToken);67 } else {68 console.log('Not approved!');69 }70 });71});72
This example demonstrates a common email verification flow. A member is initially registered but not yet approved. At registration, a verification email is sent with a link to a verification page. When the member goes to the verification page, the approval is granted and the member is logged into the site.
The code is split between three locations:
- A backend web module named register.jsw.
- The page code for the page where members register.
- The page code for the page where members confirm their registration.
1/*******************************2 * Backend code - register.jsw *3 *******************************/45import { authentication } from 'wix-members-backend';6import { triggeredEmails } from 'wix-crm-backend';78// To be called from the registration page code9export async function doRegistration(email, password, firstName, lastName) {10 // Register the member11 const registrationOptions = {12 contactInfo: {13 firstName: firstName,14 lastName: lastName15 }16 };17 const registration = await authentication.register(email, password, registrationOptions);18 console.log('Member is now registered with the site and pending approval');1920 // Send a registration confirmation email21 const emailOptions = {22 variables: {23 name: firstName,24 verifyLink: `http://yourdomain.com/post-register?token=${registration.approvalToken}`25 }26 };27 triggeredEmails.emailMember('verifyRegistration', registration.member.id, emailOptions);28 console.log('Confirmation email sent');29}3031// To be called from the post-registration page code32export async function doApproval(token) {33 try {34 // Approve the member35 const sessionToken = await authentication.approveByToken(token);36 console.log('Member approved');37 return {38 approved: true,39 sessionToken: sessionToken40 };41 } catch (error) {42 // If an error is encountered and the member can't be approved43 console.log('Member not approved');44 return {45 approved: false,46 reason: error47 };48 }49}5051/****************************52 * Page code - registration *53 ****************************/54import { doRegistration } from 'backend/register';5556// ...5758const email = $w('#email').value;59const password = $w('#password').value;60const firstName = $w('#firstName').value;61const lastName = $w('#lastName').value;6263doRegistration(email, password, firstName, lastName)64 .then(() => {65 console.log('Confirmation email sent.');66 });6768/*********************************69 * Page code - post-registration *70 *********************************/71import wixLocationFrontend from 'wix-location-frontend';72import { authentication } from 'wix-members-frontend';73import { doApproval } from 'backend/register';7475$w.onReady(async () => {76 // Get the token from the URL77 const token = wixLocationFrontend.query.token;7879 // Send token to backend code80 const approval = await doApproval(token);8182 if (approval.approved === true) {83 // Log the member in84 authentication.applySessionToken(approval.sessionToken);85 console.log('Member approved & logged in');86 } else {87 console.log('Member not approved');88 }89});90