Customize the Form

Customize the Form from the Dashboard

You can now customize the form from Cotter's Dashboard > Branding.

Customizable Features that are not available in the Dashboard:

Advanced Configuration Reference

You can use our advanced config to have more functionality:

Usage:

var cotter = new Cotter(config); // πŸ‘ˆ Put the config in here

  cotter
    .signInWithLink()
    .showEmailForm()
    .then(payload => {})
    .catch(err => {});

Config:

Here's an example of a complete configuration:

var config = {
  // Required Basic Configuration
  ApiKeyID: "<your-API-KEY-ID>",
  Type: "PHONE", // EMAIL or PHONE
  ContainerID: "cotter-container-signup",
  RedirectURL: "https://yourwebsite.com/account/create",
  SkipRedirectURL: false,
  IdentifierField: "phone",
  OnSuccess: payload => {
    // SET Token Cookie/localstorage here
    window.localStorage.setItem("access_token", payload.access_token);
    window.localStorage.setItem("refresh_token", payload.refresh_token);
    window.location.href = "/signin";
  },

  // Change Country Code
  CountryCode: ["+62"], // IT HAS TO BE AN ARRAY

  // Styling
  ButtonBackgroundColor: "#000000",
  ButtonTextColor: "#ffffff",
  ButtonText: "Sign Up Now",
  ButtonBorderColor: "#D2D3FF", // don't specify for no border

  // Adding fields
  AdditionalFields: [
    {
      label: "Full Name",
      name: "name",
      placeholder: "Enter your full name"
    }
  ],

  // Intercepting before authentication is processed
  OnBegin: payload => {
    if (payload.identifier != "+12345678910") {
      return "Phone Number is not allowed";
    }
    return null;
  }
  
  // Add WhatsApp option to send verification code
  // (only for type = PHONE)
  // ################################################
  // # πŸ‘ˆPlease read the section about WhatsApp πŸ‘ˆ #
  // #       to comply with WhatsApp's Policy       # 
  // ################################################
  PhoneChannels: ["SMS", "WHATSAPP"], // default = ["SMS"]
  
  // WhatsApp Button Styling
  ButtonWAText: "Continue with",
  ButtonWATextSubtitle:
    "Tell your customer that you'll be sending the verification code via WhatsApp",
  ButtonWABackgroundColor: "#128C7E",
  ButtonWABorderColor: "#075E54",
  ButtonWATextColor: "#ffffff",
  ButtonWALogoColor: "white",
};

Description

RedirectURL

We will send a JSON Object to this backend URL. The JSON Object will have the following format:

{
  "token": {
    "identifier": "+12345678910",
    "identifier_type": "PHONE",
    "receiver": "<your API_KEY_ID>",
    "expire_at": "1582679175", // Unix timestamp
    "signature": "7en+KvbLpMkA7Z93K5y3a12tDo2x3n..." //Signature
  },
  [IdentifierField]: "+12345678910",

  // Additional Fields
  "field_1": "Value inside field 1",
  "field_2": "Value inside field 2",
  ...
}

Description:

payload.Token

Contains the email or phone number of the user. You should verify the signature to ensure that the request comes from Cotter's server.

payload.IdentifierField

This field name will be the same as what you specify in the config above. For example, if your IdentifierField = "PHONE", you'll get

{
  ...
  "PHONE": "+12345678910",
}

payload.AdditionalFields

The rest will be filled with any additional fields you specify in the config. For example if you add fields for "name" and "address", you'll get:

{
  ...
  "name": "Hello World",
  "address": "123 Street",
}

Read how to specify Additional Fields Object below.

Skip RedirectURL

If you want to handle Cotter's token in a function instead of sending it to your backend redirect_url, you can specify

{
  ...
  SkipRedirectURL: true,
}

When this is true, the JSON payload as specified in RedirectURL section will be passed into your OnSuccess function.

Additional Fields

The additional fields will be used to generate more <input> fields for your users. The format is as following:

var config = {
  ...
  AdditionalFields: [
          {
            label: "Full Name",
            name: "name",
            placeholder: "Enter your full name"
          },
          {
            label: "Address",
            name: "address",
            placeholder: "Enter your address"
          },
          {
            label: "Prefilled Info",
            name: "prefilled",
            type: "hidden", // type can be "hidden", "text" or "number"
            initial_value: "autofill value"
          }
        ],
}

Available types: hidden, text, number

This will be sent to you to the RedirectURL endpoint above as part of the JSON object. For example, with the fields above, you'll get a JSON object like the following.

JSON Object to be sent to RedirectURL:

{
  "token": {...},
  [IdentifierField]: "+12345678910",

  // Additional Fields
  "name": "Hello World",
  "address": "Street Address",
  "prefilled": "autofill value"
  ...
}

OnBegin

This function will be invoked before the Signup/Login process. You will receive the following payload as a parameter to your function

Payload passed into your OnBegin function

var payload = {
  identifier: "+12345678910",
  identifier_type: "PHONE",
  device_type: "BROWSER",
  device_name: "Chrome ..."
};

You can do a check against the identifier here before the form is submitted.

If you include OnBegin key, you have to either return an error string, or return null if you want to continue the authentication process:

A. If you want to continue submission:

return null;

B. If you want to stop submission with an error:

return "Your error message";

Example:

 OnBegin: payload => {
  if (payload.identifier != "+12345678910") {
    return "Phone Number is not allowed";
  }
  // No error, continue submission
  return null;
},

OnSuccess

This function will be called after the call to RedirectURL is successful. Your function will receive the payload returned from RedirectURL.

It is recommended to set your sessions or cookies here, and then redirect to another page in your website. For example:

OnSuccess: payload => {
  // You can set your own sessions for your website
  window.localStorage.setItem("access_token", payload.access_token);
  window.localStorage.setItem("refresh_token", payload.refresh_token);
  window.location.href = "/dashboard";
};

OnSuccess when SkipRedirectURL is true

When you set SkipRedirectURL: true , OnSuccess will instead receive the JSON Payload token that was described in RedirectURL section.

CountryCode

The default value is CountryCode: ["+1"];

If you specify this, you have to use an array even though you only need 1 country code!

ex. with 1 country code

CountryCode: ["+1"];

ex. with 2 country codes

CountryCode: ["+62", "+91"];

Currently, the only available countries are United States, India and Indonesia. Chat us on Intercom if you need other countries, we just need to switch it on.

Last updated