在 Hapi.js 中使用 JWT 插件
随着互联网的发展,越来越多的网站需要进行用户身份验证。其中一种常见的身份验证方式是使用 JSON Web Token (JWT)。JWT 通常用于跨域身份验证 (Cross-Origin Authentication),并且可以在 RESTful API 和单页应用程序中方便地进行集成。在本文中,我们将学习如何在 Hapi.js 中使用 JWT 插件。
Hapi.js 是一个用于构建 Web 应用程序和服务的框架。它提供了一组强大的工具和插件来帮助开发者构建高质量的 Web 应用程序。其中一个插件就是 hapi-auth-jwt2,它提供了对 JWT 身份验证的支持。
在这里,我们将向您展示如何在 Hapi.js 应用程序中使用 hapi-auth-jwt2 插件。
安装 hapi-auth-jwt2 插件
首先,我们需要安装 hapi-auth-jwt2 插件
npm install hapi-auth-jwt2 --save
配置 hapi-auth-jwt2 插件
接下来,我们需要在 Hapi.js 中配置 hapi-auth-jwt2 插件并将其添加到插件列表中。在配置插件之前,我们需要生成一个密钥,该密钥用于加密和解密 JWT。
// www.javascriptcn.com code example
const Hapi = require('@hapi/hapi');
const HapiJwtAuth = require('hapi-auth-jwt2');
const server = new Hapi.Server({
port: 3000,
host: 'localhost'
});
// Create a sample JWT secret
const jwtSecret = 'jwtSecretKey';
// Register hapi-auth-jwt2 plugin
await server.register(HapiJwtAuth);
// Configure hapi-auth-jwt2 plugin
server.auth.strategy('jwt', 'jwt', {
key: jwtSecret,
validate: (decoded, request, h) => {
if (decoded.email === 'example@gmail.com') {
return { isValid: true };
}
return { isValid: false };
},
verifyOptions: {
algorithms: ['HS256']
}
});
// Add JWT authentication to default authentication
server.auth.default('jwt');在上面的代码中,我们首先创建了 Hapi.js 服务器,然后生成了一个加密密钥 jwtSecret。接下来,我们注册了 hapi-auth-jwt2 插件并配置了 jwt 身份验证策略,该策略使用 jwtSecrt 密钥进行解密,并返回一个校验对象,如果校验通过则 isValid: true,否则为 isValid: false。
最后,我们将 jwt 身份验证策略添加到我们默认的身份验证策略中,这意味着将使用此策略对未知路由进行身份验证。
使用 JWT 进行身份验证
现在,我们已经准备好使用我们的 hapi-auth-jwt2 插件进行身份验证了。我们可以使用 JWT 插件提供的 generateToken() 方法来生成 JSON Web Tokens。
// www.javascriptcn.com code example
const tokenPayload = {
email: "example@gmail.com",
};
const token = server.methods.jwt.generate(tokenPayload, {
key: jwtSecret,
algorithm: 'HS256'
});
console.log(token);在这里,我们首先定义了一个 tokenPayload 对象,它包含了我们想要包含在 JWT 中的信息。然后,我们使用 server.methods.jwt.generate() 方法生成 JWT,其中 jwtSecret 用来加密 JWT。最后,我们将生成的 JWT 打印到控制台。
要在路由中使用 JWT 进行身份验证,我们只需要将 auth: 'jwt' 选项添加到路由定义中。
// www.javascriptcn.com code example
server.route({
method: 'GET',
path: '/protected',
config: {
auth: 'jwt',
handler: (request, h) => {
return 'Hello, there!';
}
}
});现在,我们已经准备好测试我们的 JWT 身份验证了。下面的例子演示了如何在 Hapi.js 中进行身份验证。
// www.javascriptcn.com code example
const axios = require('axios');
const tokenPayload = {
email: "example@gmail.com",
};
const token = server.methods.jwt.generate(tokenPayload, {
key: jwtSecret,
algorithm: 'HS256'
});
axios.get('http://localhost:3000/protected', {
headers: {
Authorization: `Bearer ${token}`
}
}).then(res => {
console.log(res.data); // Output: Hello, there!
});在这里,我们创建了一个 HTTP GET 请求并设置 Authorization 头以用于 JWT 身份验证。在服务器端,如果 JWT 身份验证成功,则 handler 函数将返回一个简单的消息“Hello, there!”。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d7dc9ca941bf7134e0ff2d