Doing operations post email verification
To perform any task post email verification like analytics, sending a user a welcome email or notifying an internal dashboard, you'll need to override the verifyEmailPOST
API.
- NodeJS
- GoLang
- Python
import SuperTokens from 'supertokens-node';import EmailVerification from "supertokens-node/recipe/emailverification";import Session from "supertokens-node/recipe/session";
SuperTokens.init({ appInfo: { apiDomain: "...", appName: "...", websiteDomain: "..." }, recipeList: [ EmailVerification.init({ mode: "REQUIRED", override: { apis: (originalImplementation) => { return { ...originalImplementation, verifyEmailPOST: async function (input) {
if (originalImplementation.verifyEmailPOST === undefined) { throw Error("Should never come here"); }
// First we call the original implementation let response = await originalImplementation.verifyEmailPOST(input);
// Then we check if it was successfully completed if (response.status === "OK") { let { id, email } = response.user; // TODO: post email verification logic } return response; } } } } }), Session.init() ]});
import ( "fmt"
"github.com/supertokens/supertokens-golang/recipe/emailverification" "github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels" "github.com/supertokens/supertokens-golang/recipe/session/sessmodels" "github.com/supertokens/supertokens-golang/supertokens")
func main() { supertokens.Init(supertokens.TypeInput{ RecipeList: []supertokens.Recipe{ emailverification.Init(evmodels.TypeInput{ Mode: evmodels.ModeRequired, Override: &evmodels.OverrideStruct{ APIs: func(originalImplementation evmodels.APIInterface) evmodels.APIInterface { ogVerifyEmailPOST := *originalImplementation.VerifyEmailPOST (*originalImplementation.VerifyEmailPOST) = func(token string, sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) { resp, err := ogVerifyEmailPOST(token, sessionContainer, options, userContext) if err != nil { return evmodels.VerifyEmailPOSTResponse{}, err }
if resp.OK != nil { id := resp.OK.User.ID email := resp.OK.User.Email fmt.Println(id) fmt.Println(email) // TODO: post email verification logic }
return resp, nil } return originalImplementation }, }, }), }, })}
from supertokens_python import init, InputAppInfofrom supertokens_python.recipe import emailverificationfrom supertokens_python.recipe.emailverification.interfaces import APIInterface, APIOptions, EmailVerifyPostOkResultfrom typing import Dict, Any, Optionalfrom supertokens_python.recipe.session.interfaces import SessionContainer
def override_email_verification_apis(original_implementation_email_verification: APIInterface): original_email_verify_post = original_implementation_email_verification.email_verify_post
async def email_verify_post(token: str, session: Optional[SessionContainer], api_options: APIOptions, user_context: Dict[str, Any],):
response = await original_email_verify_post(token, session, api_options, user_context)
# Then we check if it was successfully completed if isinstance(response, EmailVerifyPostOkResult): _ = response.user # TODO: post email verification logic return response
original_implementation_email_verification.email_verify_post = email_verify_post return original_implementation_email_verification
init( app_info=InputAppInfo( api_domain="...", app_name="...", website_domain="..."), framework='...', recipe_list=[ emailverification.init( mode="REQUIRED", override=emailverification.InputOverrideConfig( apis=override_email_verification_apis ) ) ])