Skip to main content

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.
I