Better Auth
Utiliser Hono avec Better Auth pour l’authentification.
Better Auth est un framework d’authentification et d’autorisation pour TypeScript, indépendant du framework applicatif. Il propose d’emblée un ensemble complet de fonctionnalités et un écosystème de plugins qui facilite l’ajout de fonctions avancées.
Configuration
- Installez le framework :
sh
# npm
npm install better-auth
# bun
bun add better-auth
# pnpm
pnpm add better-auth
# yarn
yarn add better-auth- Ajoutez les variables d’environnement nécessaires dans le fichier
.env:
sh
BETTER_AUTH_SECRET=<generate-a-secret-key> (e.g. D27gijdvth3Ul3DjGcexjcFfgCHc8jWd)
BETTER_AUTH_URL=<url-of-your-server> (e.g. http://localhost:1234)- Créez l’instance Better Auth
ts
import { betterAuth } from 'better-auth'
import { prismaAdapter } from 'better-auth/adapters/prisma'
import prisma from '@/db/index'
import env from '@/env'
export const auth = betterAuth({
database: prismaAdapter(prisma, {
provider: 'postgresql',
}),
// Allow requests from the frontend development server
trustedOrigins: ['http://localhost:5173'],
emailAndPassword: {
enabled: true,
},
socialProviders: {
github: {
clientId: env.GITHUB_CLIENT_ID,
clientSecret: env.GITHUB_CLIENT_SECRET,
},
google: {
clientId: env.GOOGLE_CLIENT_ID,
clientSecret: env.GOOGLE_CLIENT_SECRET,
},
},
})
export type AuthType = {
user: typeof auth.$Infer.Session.user | null
session: typeof auth.$Infer.Session.session | null
}Le code ci-dessus :
- Configure la base de données avec Prisma ORM et PostgreSQL
- Définit les origines de confiance
- Une origine de confiance est une application autorisée à envoyer des requêtes à l’API d’authentification. Il s’agit généralement de votre client (frontend)
- Toutes les autres origines sont automatiquement bloquées
- Active l’authentification par e-mail et mot de passe et configure les fournisseurs de connexion sociale.
- Générez tous les modèles, champs et relations nécessaires dans le fichier de schéma Prisma :
sh
bunx @better-auth/cli generate- Créez le gestionnaire des requêtes de l’API d’authentification dans
routes/auth.ts
Cette route utilise le gestionnaire fourni par Better Auth pour traiter toutes les requêtes POST et GET vers le point de terminaison /api/auth.
ts
import { Hono } from 'hono'
import { auth } from '../lib/auth'
import type { AuthType } from '../lib/auth'
const router = new Hono<{ Bindings: AuthType }>({
strict: false,
})
router.on(['POST', 'GET'], '/auth/*', (c) => {
return auth.handler(c.req.raw)
})
export default router- Montez la route
Le code ci-dessous monte la route.
ts
import { Hono } from "hono";
import type { AuthType } from "../lib/auth"
import auth from "@/routes/auth";
const app = new Hono<{ Variables: AuthType }>({
strict: false,
});
const routes = [auth, ...other routes] as const;
routes.forEach((route) => {
app.basePath("/api").route("/", route);
});
export default app;