Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将应用程序复制到prod server后Passport.js API调用未正确验证_Javascript_Node.js_Express_Authentication_Passport.js - Fatal编程技术网

Javascript 将应用程序复制到prod server后Passport.js API调用未正确验证

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');

我有一个Node/React应用程序,在后端使用Express和Passport进行验证。由于某些原因,受保护的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
。这在我的本地机器和生产服务器上都可以正常工作。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
中不存在,我甚至不知道它是如何到达那里的