Skip to main content

Post signin / signup callbacks

1) On the frontend#

This method allows you to fire events immediately after a successful sign in. For example to send analytics events post sign in.

import SuperTokens from "supertokens-auth-react";import ThirdPartyPasswordless from "supertokens-auth-react/recipe/thirdpartypasswordless";import Session from "supertokens-auth-react/recipe/session";
SuperTokens.init({    appInfo: {        apiDomain: "...",        appName: "...",        websiteDomain: "..."    },    recipeList: [        ThirdPartyPasswordless.init({            contactMethod: "EMAIL_OR_PHONE",
            onHandleEvent: async (context) => {                if (context.action === "SESSION_ALREADY_EXISTS") {                    // TODO:                } else if (context.action === "PASSWORDLESS_RESTART_FLOW") {                    // TODO:                } else if (context.action === "PASSWORDLESS_CODE_SENT") {                    // TODO:                } else if (context.action === "SUCCESS") {                    if (context.isNewUser) {                        if ("phoneNumber" in context.user) {                            const { phoneNumber } = context.user;                        } else {                            const { email } = context.user;                        }                        // TODO: Sign up                    } else {                        // TODO: Sign in                    }                }            }        }),        Session.init()    ]});
info

Please refer to this page to learn more about the onHandleEvent hook.

2) On the backend#

For this, you'll have to override the consumeCodePOST API in the init function call.

import SuperTokens from "supertokens-node";import ThirdPartyPasswordless from "supertokens-node/recipe/thirdpartypasswordless";import Session from "supertokens-node/recipe/session";
SuperTokens.init({    appInfo: {        apiDomain: "...",        appName: "...",        websiteDomain: "..."    },    recipeList: [        ThirdPartyPasswordless.init({            contactMethod: "EMAIL", // This example will work with any contactMethod            flowType: "USER_INPUT_CODE_AND_MAGIC_LINK", // This example will work with any flowType
            override: {                apis: (originalImplementation) => {                    return {                        ...originalImplementation,                        // override the thirdparty sign in / up API                        thirdPartySignInUpPOST: async function (input) {                            if (originalImplementation.thirdPartySignInUpPOST === undefined) {                                throw Error("Should never come here");                            }
                            // TODO: Some pre sign in / up logic
                            let response = await originalImplementation.thirdPartySignInUpPOST(input);
                            if (response.status === "OK") {                                if (response.createdNewUser) {                                    // TODO: some post sign up logic                                } else {                                    // TODO: some post sign in logic                                }                            }
                            return response;                        },
                        consumeCodePOST: async (input) => {                            if (originalImplementation.consumeCodePOST === undefined) {                                throw Error("Should never come here");                            }
                            // First we call the original implementation of consumeCodePOST.                            const response = await originalImplementation.consumeCodePOST(input);
                            // Post sign up response, we check if it was successful                            if (response.status === "OK") {                                if ("phoneNumber" in response.user) {                                    const { id, phoneNumber } = response.user;                                } else {                                    const { id, email } = response.user;                                }
                                if (response.createdNewUser) {                                    // TODO: post sign up logic                                } else {                                    // TODO: post sign in logic                                }                            }                            return response;                        }                    }                }            }        }),        Session.init({ /* ... */ })    ]});

Using the code above, if createdNewUser is true, you can (for example):

  • Add the user's ID and their info to your own database (in addition to it being stored in SuperTokens).
  • Send analytics events about a sign up.
  • Send a welcome email to the user.
Which frontend SDK do you use?
supertokens-web-js / mobile
supertokens-auth-react