Basic-Auth-Middleware
Diese Middleware kann auf einen bestimmten Pfad HTTP-Basic-Authentifizierung anwenden. Die Implementierung von Basic-Authentifizierung auf Cloudflare Workers oder anderen Plattformen ist komplizierter als erwartet. Mit dieser Middleware ist sie jedoch einfach.
Weitere Informationen zur Funktionsweise des Basic-Authentifizierungsschemas findest du in der MDN-Dokumentation.
Import
import { Hono } from 'hono'
import { basicAuth } from 'hono/basic-auth'Verwendung
const app = new Hono()
app.use(
'/auth/*',
basicAuth({
username: 'hono',
password: 'acoolproject',
})
)
app.get('/auth/page', (c) => {
return c.text('You are authorized')
})Auf eine bestimmte Route und Methode beschränken:
const app = new Hono()
app.get('/auth/page', (c) => {
return c.text('Viewing page')
})
app.delete(
'/auth/page',
basicAuth({ username: 'hono', password: 'acoolproject' }),
(c) => {
return c.text('Page deleted')
}
)Wenn du den Benutzer selbst überprüfen möchtest, gib die Option verifyUser an. Der Rückgabewert true bedeutet, dass er akzeptiert wird.
const app = new Hono()
app.use(
basicAuth({
verifyUser: (username, password, c) => {
return (
username === 'dynamic-user' && password === 'hono-password'
)
},
})
)Optionen
required username: string
Der Benutzername des zu authentifizierenden Benutzers.
required password: string
Das Passwort, gegen das der angegebene Benutzername authentifiziert wird.
optional realm: string
Der Name des Authentifizierungsbereichs als Bestandteil des zurückgegebenen WWW-Authenticate-Challenge-Headers. Der Standardwert ist "Secure Area".
Weitere Informationen: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives
optional hashFunction: Function
Eine Funktion zur Hash-Berechnung für den sicheren Vergleich von Passwörtern.
optional verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean>
Die Funktion zur Überprüfung des Benutzers.
optional invalidUserMessage: string | object | MessageFunction
MessageFunction ist (c: Context) => string | object | Promise<string | object>. Die benutzerdefinierte Nachricht für einen ungültigen Benutzer.
optional onAuthSuccess: (c: Context, username: string) => void | Promise<void>
Eine Callback-Funktion, die nach erfolgreicher Authentifizierung aufgerufen wird. Damit kannst du Kontextvariablen setzen oder Seiteneffekte ausführen, ohne den Authorization-Header erneut auszulesen.
app.use(
'/auth/*',
basicAuth({
username: 'hono',
password: 'acoolproject',
onAuthSuccess: (c, username) => {
c.set('username', username)
},
})
)
app.get('/auth/page', (c) => {
const username = c.get('username')
return c.text(`Hello, ${username}!`)
})Weitere Optionen
optional ...users: { username: string, password: string }[]
Rezepte
Mehrere Benutzer definieren
Diese Middleware erlaubt auch die Übergabe beliebig vieler Argumente mit Objekten, die weitere Paare von username und password definieren.
app.use(
'/auth/*',
basicAuth(
{
username: 'hono',
password: 'acoolproject',
// Define other params in the first object
realm: 'www.example.com',
},
{
username: 'hono-admin',
password: 'super-secure',
// Cannot redefine other params here
},
{
username: 'hono-user-1',
password: 'a-secret',
// Or here
}
)
)Oder mit weniger fest kodierten Werten:
import { users } from '../config/users'
app.use(
'/auth/*',
basicAuth(
{
realm: 'www.example.com',
...users[0],
},
...users.slice(1)
)
)