Basic Auth 中间件
该中间件可以对指定的路径应用 Basic 认证。 使用 Cloudflare Workers 或其他平台实现 Basic 认证比看起来要复杂,但是有了这个中间件,一切都变得轻而易举。
有关 Basic 认证方案底层工作原理的更多信息,请参阅 MDN 文档。
引入
ts
import { Hono } from 'hono'
import { basicAuth } from 'hono/basic-auth'
用法
ts
const app = new Hono()
app.use(
'/auth/*',
basicAuth({
username: 'hono',
password: 'acoolproject',
})
)
app.get('/auth/page', (c) => {
return c.text('You are authorized') // 你已获得授权
})
要限制特定的路由 + 方法,请这样做:
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') // 页面已删除
}
)
如果你想自行验证用户,请指定 verifyUser
选项;返回 true
表示验证通过。
ts
const app = new Hono()
app.use(
basicAuth({
verifyUser: (username, password, c) => {
return (
username === 'dynamic-user' && password === 'hono-password'
)
},
})
)
选项
required username: string
进行身份验证的用户的用户名。
required password: string
用于对提供的用户名进行身份验证的密码值。
optional realm: string
Realm 的域名,作为返回的 WWW-Authenticate 质询标头的一部分。 默认为 "Secure Area"
。 更多信息请参阅:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate#directives
optional hashFunction: Function
用于处理密码哈希以便安全比较的函数。
optional verifyUser: (username: string, password: string, c: Context) => boolean | Promise<boolean>
用于验证用户的函数。
optional invalidUserMessage: string | object | MessageFunction
MessageFunction
是 (c: Context) => string | object | Promise<string | object>
。 用户无效时的自定义消息。
更多选项
optional ...users: { username: string, password: string }[]
技巧
定义多个用户
该中间件还允许你传递包含定义更多 username
和 password
对的对象的可选参数。
ts
app.use(
'/auth/*',
basicAuth(
{
username: 'hono',
password: 'acoolproject',
// 在第一个对象中定义其他参数
realm: 'www.example.com',
},
{
username: 'hono-admin',
password: 'super-secure',
// 无法在此处重新定义其他参数
},
{
username: 'hono-user-1',
password: 'a-secret',
// 也不能在这里重新定义
}
)
)
或者不那么硬编码的方式:
ts
import { users } from '../config/users'
app.use(
'/auth/*',
basicAuth(
{
realm: 'www.example.com',
...users[0],
},
...users.slice(1)
)
)