Javascript 将应用程序复制到prod server后Passport.js API调用未正确验证
我有一个Node/React应用程序,在后端使用Express和Passport进行验证。由于某些原因,受保护的API调用无法正常工作。我可以很好地登录,因为这显然是不受保护的。我的某些API调用仅限于管理员 我已经尽可能地缩小了问题的范围。我有这个user_identification.js文件,这是我能找到的最远的问题Javascript 将应用程序复制到prod server后Passport.js API调用未正确验证,javascript,node.js,express,authentication,passport.js,Javascript,Node.js,Express,Authentication,Passport.js,我有一个Node/React应用程序,在后端使用Express和Passport进行验证。由于某些原因,受保护的API调用无法正常工作。我可以很好地登录,因为这显然是不受保护的。我的某些API调用仅限于管理员 我已经尽可能地缩小了问题的范围。我有这个user_identification.js文件,这是我能找到的最远的问题 const db = require('../models'); const User_DB = require('../Services/Users/User_DB');
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
。这在我的本地机器和生产服务器上都可以正常工作。user为空。我试着安慰一下req
对象,它吐出了一个巨大的对象,所以工作正常
在我的app.js中,我将在Passport初始化后添加用户_标识作为中间件。这里只是我的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\u访问
中间件应该只允许管理员访问端点。
这就是admin\u access.js
文件的外观:
module.exports = (req, res, next) => {
if (!req.user_permission || req.user_permission > 1) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
我确实发现,如果从该端点删除admin\u访问
行,它确实可以正常工作
如果有人至少能找到开始调试的地方,那就太好了。我不知道为什么user
对象在req
中不存在,我甚至不知道它是如何到达那里的