Zum Inhalt springen

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 ​

ts
import { Hono } from 'hono'
import { basicAuth } from 'hono/basic-auth'

Verwendung ​

ts
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:

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

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

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

ts
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:

ts
import { users } from '../config/users'

app.use(
  '/auth/*',
  basicAuth(
    {
      realm: 'www.example.com',
      ...users[0],
    },
    ...users.slice(1)
  )
)

Veröffentlicht unter der MIT-Lizenz.