Better Auth
Hono zusammen mit Better Auth zur Authentifizierung verwenden.
Better Auth ist ein frameworkunabhängiges Authentifizierungs- und Autorisierungsframework für TypeScript. Es bietet sofort einen umfassenden Funktionsumfang und verfügt über ein Plugin-Ökosystem, das das Hinzufügen fortgeschrittener Funktionen vereinfacht.
Konfiguration
- Installiere das Framework:
sh
# npm
npm install better-auth
# bun
bun add better-auth
# pnpm
pnpm add better-auth
# yarn
yarn add better-auth- Füge die erforderlichen Umgebungsvariablen in der Datei
.envhinzu:
sh
BETTER_AUTH_SECRET=<generate-a-secret-key> (e.g. D27gijdvth3Ul3DjGcexjcFfgCHc8jWd)
BETTER_AUTH_URL=<url-of-your-server> (e.g. http://localhost:1234)- Erstelle die Better-Auth-Instanz
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
}Der obige Code:
- Richtet die Datenbank für die Verwendung von Prisma ORM und PostgreSQL ein
- Legt die vertrauenswürdigen Origins fest
- Ein vertrauenswürdiger Origin ist die Anwendung, die Anfragen an die Authentifizierungs-API stellen darf. Normalerweise ist dies dein Client (Frontend)
- Alle anderen Origins werden automatisch blockiert
- Aktiviert die Authentifizierung per E-Mail und Passwort und konfiguriert Anbieter für Social Login.
- Generiere alle erforderlichen Modelle, Felder und Beziehungen in der Prisma-Schemadatei:
sh
bunx @better-auth/cli generate- Erstelle in
routes/auth.tsden API-Handler für Anfragen an die Authentifizierungs-API
Diese Route verwendet den von Better Auth bereitgestellten Handler, um alle POST- und GET-Anfragen an den Endpunkt /api/auth zu verarbeiten.
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- Binde die Route ein
Der folgende Code bindet die Route ein.
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;