在前端开发中,经常需要实现用户权限控制的功能,这时候就可以使用 JSON Web Tokens (JWTs) 来进行认证和授权。而 npm 上有个很好用的包 -- jwt-express-roles 可以帮助我们快速实现 JWTs 的使用和角色权限管理。本文将介绍如何使用这个包来实现用户权限控制。
前置知识
在使用本文中的示例代码前,需要先掌握以下知识:
- Node.js
- Express.js
- JWTs
- 理解 RESTful API
安装
使用以下命令来安装 jwt-express-roles:
npm install jwt-express-roles
使用方法
在使用 jwt-express-roles 之前,需要设置以下环境变量:
process.env.JWT_SECRET = 'mysecret'; // 设置 JWT 密钥
初始化
在 Express.js 应用中,需要引入 jwt-express-roles 并创建实例:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- ----- --------------- - ----------------------------- ----- ----------- - ------------------------------------- -- ----------- --- --------------------- -- ------- --- ---- ----- ----- - - ------ ---------- ------- --------- ---------- ------- ---------- ------- ---------- ------ -------- -- ----- ------ - - ------ ------ --------------------------- --------- -- ----- --------------- - ------------------------ -- ---- ------------------------- -- ----
上面的代码展示了如何创建 jwt-express-roles 中间件的实例,并将其运行在 Express.js 应用中。其中,配置对象中包含了 roles 和 access_denied_redirect_url 两个属性,分别代表了角色和 access denied 重定向网址。
创建路由
在 Express.js 应用中,可以基于 jwt-express-roles 中间件来创建受保护的路由:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- - --------- - - ----------------------------- --------------------------- ------------------- ----------- ----- ---- ----- -- - -- -- ----- - ------ ------- -------------- --- -- ---- ---------- -- ------------- ----- ---- ----- -- ------ ------- --- -------------- - -------
自定义中间件
有时候,可能需要根据不同的角色来调用不同的中间件,可以使用 jwt-express-roles 中的 middleware 方法:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- - ---------- - - ----------------------------- --------------------------- ------------------- ---------------------- ----- ---- ----- -- - -- -- ----- ----------------- -------------- --- -- ---- ---------- -- ------------- ----- ---- ----- ------- --- -------------- - -------
捕获 access denied 异常
使用 jwt-express-roles 中间件后,当用户权限不足时,将返回 access denied 异常。可以在应用中使用以下代码段来捕获该异常,并做相应处理:
app.use((err, req, res, next) => { if (err.name === 'access-denied') { res.status(401).send('Access denied'); } else { next(err); // 如果不是 access denied 异常,则交给全局异常处理中间件 } });
示例代码
-- -------------------- ---- ------- -- ------ ----- ------- - ------------------- ----- --- - ---------- ----- --------------- - ----------------------------- ----- ------ - -------------------- ----- ----------- - ------------------------------------- ---------------------- - ----------- --------------------- ------------------------ ---------------------------- --------- ----- ---- ----- ----- - - ------ ---------- ------- --------- ---------- ------- ---------- ------- ---------- ------ -------- -- ----- ------ - - ------ ------ --------------------------- --------- -- ----- --------------- - ------------------------ ------------------------- ------------ -------- ------------- ---- ---- ----- -- - -- --------- --- ---------------- - ---------------------------- --------- - ---- - ---------- - --- ---------------- -- -- ---------------- ----------- -- --------- ----- ------- - ------------------- ----- ------ - ----------------- ----- - ---------- ---------- - - ----------------------------- ----- - ------- - - -------------------------- --------------- ----- ---- ----- -- - --------------- -------- --- ---------------------------- ----- ---- ----- -- - ----- - ------ -------- - - --------- ----- ---- - -------------- ---------- -- ------- - ----------------------------- ----- -- ----------- - ---- - ----- ----- - ----------- ---------- ----- --- - --- --------------------------- ------------------- ----------- ----- ---- ----- -- - -------------- --- -- ---- ---------- -- ------------- ----- ---- ----- -- ------ ------- --- --------------------------- ------------------- ---------------------- ----- ---- ----- -- - -------------- --- -- ---- ---------- -- ------------- ----- ---- ----- ------- --- --------------------- ----- ---- ----- -- - ---------------------------- --------- --- -------------- - -------
结论
通过使用 jwt-express-roles 包,我们可以快速实现用户权限控制,同时又有极高的扩展性和灵活性。希望本文对你的学习和实践有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f8f238a385564ab6f55