express-jwt-permissions-x 是一个基于 Express 框架的 JSON Web Token(JWT)权限管理模块。它允许你使用简单的 JSON 将权限分配给不同的用户角色,并在 Express 请求中进行验证。如果您正在构建一个需要进行身份验证和授权的应用程序,或为一个现有的应用程序添加身份验证和授权,这个模块就是您需要的。
安装
通过npm直接安装express-jwt-permissions-x到您的项目中:
npm install express-jwt-permissions-x
或者在你的package.json
文件中添加以下条目并运行npm install
:
"express-jwt-permissions-x": "^1.2.0"
快速上手
以下教程将通过一个简单的角色验证示例展示express-jwt-permissions-x的用法。
1.首先创建一个名为server.js
的新文件,并安装以下npm模块:
- express:用于创建Express应用程序
- body-parser:用于解析POST请求正文中的JSON数据
- jsonwebtoken:使用JWT进行用户身份验证
npm install express body-parser jsonwebtoken
2.在server.js
中添加以下代码,并使用npm start启动本地Web服务器:
-- -------------------- ---- ------- -- ------- ----- ------- - ------------------- ----- ---------- - ----------------------- ----- --- - ------------------------ ----- --------------------- - ------------------------------------- -- ---------- ----- --- - ---------- -- --------- --------------------------- -- -------- -- ---- ------------------ ----- ---- -- - -- -------- ----- - --------- -------- - - --------- -- -------------------- -- ---------------- ------------ -- --------- --- ------- -- -------- --- ----------- - ----- ----- - ---------- -------- -- ----------------- ---------- ----- --- - ---- - -------------------- - --- -- ------------------------- --------------------- ----------------------- -------------------- ------- --- ----- ---- -- - ---------- -------- ----- ----- -- ---------- --- --- -- ------ ---------------- -- -- - ------------------- ------- -- ---- ------- ---
我们创建了一个名为/login
的新路由,以接受POST请求,并比较请求主体中的用户名和密码。如果凭据正确,则使用jsonwebtoken
模块生成JWT token,并将其发送回客户端。
我们还创建了一个名为/protected
的保护路由。此路由使用express-jwt-permissions-x
中间件,在验证身份验证之后还要验证请求中的roles
属性。只有当JWT token中包含具有这些权限的角色时,才能访问此路由。
3.启动本地Web服务器:
npm start
您现在可以使用任何HTTP客户端(如Postman、cURL等)访问来测试新的保护路由。 在请求头中,您需要将生成的JWT token放在"Authorization"键中的"Bearer"模式下:
GET /protected HTTP/1.1 Host: localhost:3000 Authorization: Bearer <JWT token>
如果您没有在请求主体中使用正确的用户名和密码进行身份验证,则应该收到401响应。
配置实例
您可以使用expressJwtPermissions()
中间件来配置和自定义如下属性:
- permissionsProperty(字符串变量,默认为
permissions
):用于在JWT token有效负载中指定权限的属性名称。 - permissionsExtractor(函数变量,默认为
(req) => req.user.permissions
):用于从JWT token有效负载中提取权限的函数。该函数应返回一个数组。 - requestProperty(字符串变量,默认为
permissions
):用于将权限数组添加到Express请求对象的属性名称。 - requestObject(布尔变量,默认false):设置为true,以便向请求对象添加整个JWT token的有效负载。
- permissionsCheck(布尔值或函数变量,默认为true):指定权限检查是否应在middleware级别上控制。如果设置为false,则将跳过权限检查。 如果设置为true,则权限检查将使用默认的
express-jwt-permissions
逻辑进行。 如果传递函数,则该函数应对权限进行检查并返回一个布尔值,指示请求是否允许访问受保护的路由。
以下是一个示例,其中应用了更改默认值的配置:
-- -------------------- ---- ------- ----------------- ----------------------- -------------------- ----------------- --------------------- ----- -- -------------------- ---------------- ----------------- -------------- ---- --- ----- ---- -- - ---------- -------- ----- ----- -- ---- --------- -- ----- ---- --- ------- ------------ ------------ ------------------- ------------- ------- --- ---
该路由只允许拥有my_permissions
属性数组中包含"admin"权限的用户访问。有关如何在JWT token有效负载中指定"my_permissions"属性的信息,请参阅相关文档。
结论
express-jwt-permissions-x是一个强大而灵活的JWT权限管理模块,可以轻松管理您应用程序中的用户角色和权限。 它提供了简单的接口和灵活的配置选项,允许您根据自己的需求和项目需要进行一些自定义设置。 希望这篇文章对您有所帮助,并使您更好地了解了如何使用该模块。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005695a81e8991b448e4d0e