推荐答案
// www.javascriptcn.com code example
const fastify = require('fastify')({ logger: true });
const fastifyBasicAuth = require('fastify-basic-auth');
// 定义认证函数
const authenticate = {
validate: async (username, password, req, reply) => {
if (username === 'admin' && password === 'password') {
return;
}
throw new Error('Unauthorized');
}
};
// 注册 fastify-basic-auth 插件
fastify.register(fastifyBasicAuth, authenticate);
// 添加一个需要认证的路由
fastify.route({
method: 'GET',
url: '/secure',
preHandler: fastify.basicAuth,
handler: async (req, reply) => {
return { message: 'You are authenticated!' };
}
});
// 启动服务器
const start = async () => {
try {
await fastify.listen(3000);
fastify.log.info(`Server listening on ${fastify.server.address().port}`);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();本题详细解读
1. 安装 fastify-basic-auth 插件
首先,你需要安装 fastify-basic-auth 插件。可以通过以下命令进行安装:
npm install fastify-basic-auth
2. 引入并注册插件
在代码中引入 fastify-basic-auth 插件,并通过 fastify.register 方法注册插件。注册时需要提供一个认证函数 authenticate,该函数包含一个 validate 方法,用于验证用户名和密码。
3. 定义认证函数
authenticate 对象中的 validate 方法接收四个参数:username、password、req 和 reply。在这个方法中,你可以编写逻辑来验证用户名和密码。如果验证通过,直接返回;如果验证失败,抛出一个错误。
4. 添加需要认证的路由
在定义路由时,可以通过 preHandler 选项来指定 fastify.basicAuth 作为前置处理器。这样,只有通过 Basic 认证的请求才能访问该路由。
5. 启动服务器
最后,启动 Fastify 服务器并监听指定端口。如果服务器启动成功,会输出日志信息;如果启动失败,会输出错误信息并退出进程。
通过以上步骤,你可以使用 fastify-basic-auth 插件在 Fastify 应用中实现 Basic 认证。