Overview

Email verification helps confirm user identities by requiring them to verify their email addresses before gaining full access. This is especially useful for preventing spam and unauthorized access.

When a user signs up, Nile Auth:

  1. Sends a verification email using your configured SMTP server.
  2. Generates a unique verification_token for the user.
  3. Grants access to the user after they click the verification link.

Prerequisites

  • A configured SMTP server is required to send verification emails. You can set this up in the Nile Auth UI under Tenants & Users -> Configuration -> Email templates.
  • A web server configured to handle Nile Auth requests and serve html.

Implementation

1

Install dependencies

npm install @niledatabase/server @niledatabase/react
2

Your application must expose API routes to handle authentication operations.

First, create a folder called api under the app folder and a folder called [...nile] under it:

mkdir -p app/api/\[...nile\]

Create following files handle the calls to your server, as well as expose the nile instance to your application:

/api/[...nile]/nile.ts

import { Nile } from "@niledatabase/server";
export const nile = await Nile();
export const { handlers } = nile.api;

/api/[...nile]/route.ts

import { handlers } from "./nile";
export const { POST, GET, DELETE, PUT } = handlers;
3

Middleware for Verification Enforcement

import NileServer from "@niledatabase/server";

export const nile = await NileServer();

app.use("verification-page", async (req, res, next) => {
  const me = await nile.api.users.me(req.headers);

  if (!me.emailVerified) {
    return res.redirect("/force-verification");
  }

  next();
});

This middleware ensures that unverified users are redirected to a verification page.

4

Verification Button in the Frontend

"use client";
import { User } from "@niledatabase/server";
import { EmailSignInButton } from "@niledatabase/react";

export default function VerifyButton({ me }: { me: User }) {
  return <EmailSignInButton email={me.email} />;
}

This button allows users to trigger email verification manually.

5

Sign-in via Email

You can also allow users to sign in directly using their email without requiring a password.

"use client";
import { EmailSignIn } from "@niledatabase/react";

export default function EmailLogin() {
  return <EmailSignIn />;
}

Verification flow

  1. The user inputs their email on the login/signup page.
  2. Nile sends an email with a verification token using the configured SMTP settings.
  3. The link exchanges the verification_token for an authenticated session.
  4. Upon successful verification, the user can access the application.

This version improves clarity, fixes errors (e.g., “there” → “their”, “invitationt” → “invitation”), and better explains the verification process. Let me know if you need further refinements! 🚀

Was this page helpful?