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 @niledatabase/client @niledatabase/nextjs
2

Your application must expose API routes to handle authentication operations.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:
app/api/[...nile]/nile.ts
import { Nile } from "@niledatabase/server";
import { nextJs } from '@niledatabase/nextjs';

export const nile = Nile({ extensions: [nextJs] });
app/api/[...nile]/route.ts
import { nile } from "./nile";
export const { POST, GET, DELETE, PUT } = nile.handlers;
3

Middleware for Verification Enforcement

import { Nile } from "@niledatabase/server";

export const nile = Nile();

app.use("verification-page", async (req, res, next) => {
  const me = await nile.users.getSelf(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.