node.js - 授权中间件功能
问题描述
我正在尝试构建授权系统,node.js
下面的代码一切正常。
授权.js
const expressJwt = require('express-jwt');
const userService = require('../routes/users/user.service');
module.exports = authorize;
function authorize(roles = []) {
return expressJwt(
{
<<SOME SECRET>>,
isRevoked: (req, payload, done) => _isRevoked(req, payload, done, roles)
})
.unless(
{
path: [
]
});
}
async function _isRevoked(req, payload, done, roles) {
var user = await userService.getById(payload.sub);
var userRoles = payload.role;
// revoke token if user no longer exists
if (!user) {
console.log("Authorization: User not found")
return done(null, true);
}
//check if user is authorized
if (roles.length && !roles.every(elem => userRoles.indexOf(elem) > -1)) {
// user's role is not authorized
return done(null, true);
}
done()
};
角色控制器.js
const express = require('express')
const router = express.Router()
const authorize = require('helpers/authorize')
router.post('/create', authorize('Admin'), createRole)
module.exports = router
function createRole(req, res, next)
{
//role creation code goes here
}
到目前为止一切正常,当create
使用令牌请求路由时,authorize.js
正在检查令牌是否有效以及在检查用户角色是否与路由角色匹配之后(例如admin
这里)
现在,问题在这里
我正在尝试将authorize
中间件移至RoleController.js
. database
并根据请求的路由获取模块的访问权限req.originalUrl
var isAuthorized = function (req, res, next)
{
authorize(req.originalUrl) // just trying to check the authorization as a first level and moving forward to route only if authorized
next();
}
router.post('/create', createRole) //Removed authorize here
更改为此后,它无法按预期工作。流程转到该authorize
函数,但它没有调用该_isRevoked
函数。
可能是因为async
在,_isRevoked
但我被困在这里继续。有任何想法吗?
解决方案
推荐阅读
- mariadb - 将 MEDIAN 与 GROUP BY 一起使用
- swift - 如何彻底删除所有 Xcode 程序和缓存文件?
- javascript - 使用循环的节点 js 和 ejs
- r - 用循环填充数据框
- xml - 如何在开发者控制台匿名窗口中测试这个编写 XML Salesforce 文档?
- html - 将单选按钮的标签移动到单选按钮上方
- c# - 如何在 UWP 应用中通过 log4net 配置日志记录
- objective-c - 带有 WebView 的全屏(信息亭)NSWindowController 需要先单击才能单击任何链接
- perl - 在安装时使用 ExtUtils::MakeMaker/Dist::Zilla (dzil) 安装附加文件
- f# - F# 文件类型图标丢失