我不明白为什么我的验证中间件会表现为这种方式

时间:2019-09-18 15:16:25

标签: node.js mongodb typescript mongoose middleware

在最后一个比较块中,我正在比较user.rol_id是否不等于角色的id,奇怪的是,根据逻辑它应该是相反的,因此,我感谢对什么的任何解释比较中正在发生。

export function verifyRol(rol: string){
    return async (req: Request, res: Response, next: NextFunction) => {
        const id = res.locals.jwtPayload.id;
        let user, rolModel;
        try {
            user = await User.findById(id);
            if (!user) return res.status(404).json({message: 'No se encuentra el usuario'});

            rolModel = await Rol.findOne({type_user: 1, name: rol});
            if (!rolModel) return res.status(404).json({message: 'No se encuentra el rol'});


            if (user.rol_id !== rolModel._id) {
                console.log(':O');
                next();
            }else {
                return res.status(401).json({message: 'No se encuentra autorizado'});
            }

        } catch (error) {
            return res.status(401).json({message: 'No se encuentra autorizado'});
        }
    }
}

我将TypeScript与NodeJS和MongoDB一起使用

1 个答案:

答案 0 :(得分:0)

陈述自己时,所做的与您想要的相反。另外,MongoDB返回的ID为ObjectId而不是string,因此相等检查将始终返回false。如果两个对象都是ObjectId,则应使用.equals method

// If user has not the required role, throw a 401
if (!user.rol_id.equals(rolModel._id)) {
    return res.status(401).json({message: 'No se encuentra autorizado'});
// Else, continue to the next middleware
} else {
    console.log(':O');
    next();
}

否则,您可以将ObjectId转换为字符串:

if (rolMode._id.toString() !== user.rol_id)