Hapi-Auth-JWT2 使用教程
项目介绍
Hapi-Auth-JWT2 是一个用于 Hapi.js 应用程序的身份验证插件,它使用 JSON Web Tokens (JWT) 进行无状态身份验证。该项目旨在提供一个简单、易用且积极维护的身份验证方案,适用于需要安全认证的 API 和应用。
项目快速启动
安装
首先,通过 npm 安装 hapi-auth-jwt2 和 jsonwebtokens:
npm install hapi-auth-jwt2 jsonwebtokens
配置
在你的 Hapi.js 项目中,配置 hapi-auth-jwt2 插件:
const Hapi = require('hapi');
const Jwt = require('hapi-auth-jwt2');
const server = Hapi.server({ port: 3000 });
const validate = async function (decoded, request) {
// 这里进行用户验证逻辑
return { isValid: true };
};
const init = async () => {
await server.register(Jwt);
server.auth.strategy('jwt', 'jwt', {
key: 'your-secret-key', // 替换为你的密钥
validate,
verifyOptions: { algorithms: ['HS256'] }
});
server.auth.default('jwt');
server.route({
method: 'GET',
path: '/',
handler: (request, h) => {
return { message: 'Hello, JWT!' };
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
应用案例和最佳实践
应用案例
假设你正在开发一个需要用户认证的 API,你可以使用 hapi-auth-jwt2 来保护你的路由。例如,你有一个 /profile
路由,只有认证用户才能访问:
server.route({
method: 'GET',
path: '/profile',
handler: (request, h) => {
return { user: request.auth.credentials };
},
options: {
auth: 'jwt'
}
});
最佳实践
- 密钥管理:确保你的密钥安全,不要硬编码在代码中,可以使用环境变量或密钥管理服务。
- 令牌过期:设置合理的令牌过期时间,以平衡安全性和用户体验。
- 错误处理:在验证函数中处理各种错误情况,如无效令牌、过期令牌等。
典型生态项目
相关项目
- jsonwebtoken:用于生成和验证 JWT 的库。
- hapi:Hapi.js 框架,用于构建服务端应用程序。
- glue:Hapi.js 的服务器组合器,用于模块化配置服务器。
集成示例
你可以将 hapi-auth-jwt2 与 glue 一起使用,以模块化的方式配置你的 Hapi.js 服务器:
const Glue = require('@hapi/glue');
const manifest = {
server: {
port: 3000
},
register: {
plugins: [
{
plugin: require('hapi-auth-jwt2')
}
]
}
};
const options = {
relativeTo: __dirname
};
const startServer = async function () {
try {
const server = await Glue.compose(manifest, options);
await server.start();
console.log('Server running at:', server.info.uri);
} catch (err) {
console.error(err);
process.exit(1);
}
};
startServer();
通过以上步骤,你可以快速启动并配置 hapi-auth-jwt2,保护你的 Hapi.js 应用程序的路由,并了解相关的最佳实践和生态项目。