将应用程序复制到产品服务器后,Passport.js API调用未正确验证

问题描述

我有一个在后端使用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 (将#修改为@)