问题描述
我有一个在后端使用Express和Passport进行身份验证的Node / React应用程序。由于某些原因,受保护的API调用无法正常工作。我可以正常登录,因为显然没有受到保护。我有某些API调用仅限于管理员。
我已尽可能缩小问题的范围。我有这个user_identification.js文件,该文件已尽我所能查找问题。
const db = require('../models');
const User_DB = require('../Services/Users/User_DB');
const dbHandler = User_DB(db);
const User = require('../Services/Users/User_Service');
// each request that comes through will have a req.user if the user is logged in
module.exports = (req,res,next) => {
console.log('user_id req.user: ',req.user);
const user_id = req.user ? req.user.id : null;
if (user_id) {
try {
User(dbHandler)
.userSearch(user_id)
.then((user) => {
if (user) {
req.user_permission = user.permission_id;
}
next();
})
.catch((e) => console.log(e));
} catch (e) {
console.log(e);
}
} else {
next();
}
};
在顶部,我有一个console.log
,它吐出了req.user
。在我的本地计算机上和生产服务器req.user
上都可以正常运行。我尝试安慰req
对象,但它吐出一个巨大的对象,所以工作正常。
在我的app.js中,我在初始化Passport之后将user_identification添加为中间件。这只是我的app.js文件中的一个片段。
app.use(flash());
// passport authentication
app.use(passport.initialize());
app.use(passport.session());
// user identification
app.use(require('./middleware/user_identification'));
require('./API_Gateways/passport');
app.use('/auth',require('./API_Gateways/Auth_Routes'));
然后这是发生故障的服务器上的api端点:
router.get(
'/getvendors',admin_access,asyncHandler(async (req,res) => {
return await vendor.getvendors()
.then((r) => {
return res.status(200).json({
vendors: r.map((vendor) => {
return {
vendor: vendor.dataValues.vendor_name,deleted: vendor.dataValues.deleted_at
};
})
});
})
.catch((e) => console.log('error getting vendors: ',e));
})
);
该admin_access
中间件应该只允许管理员访问端点。
admin_access.js
文件的外观如下:
module.exports = (req,next) => {
if (!req.user_permission || req.user_permission > 1) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
我确实弄清楚了是否从该端点删除了admin_access
行,它确实可以正常工作。
如果某人至少可以弄清楚该从哪里开始调试,那将很棒。对于user
中不存在req
对象的原因,我一无所知,我什至不知道它是如何到达那里的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)