Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

409
Visualizações
encontrar usuario con rol de administrador como verdadero

Estoy trabajando en un proyecto de comercio electrónico y solo quiero permitir que los usuarios con administrador puedan crear y actualizar productos en la colección de productos (base de datos MongoDB), pero de alguna manera me estoy equivocando porque cuando uso un usuario con el token verdadero de administrador como token de portador en la autorización, recibo el error de captura

este es mi código de modelo de usuario

 import mongoose from "mongoose"; import bcrypt from 'bcrypt' import dotenv from 'dotenv' dotenv.config() const userSchema = new mongoose.Schema({ username:{ required:true, type:String }, email:{ type:String, unique:true, required:true, }, password:{ type:String, required:String }, profilePic:{ type:String, required:true, default:'https://t3.ftcdn.net/jpg/03/46/83/96/360_F_346839683_6nAPzbhpSkIpb8pmAwufkC7c5eD7wYws.jpg' }, admin:{ type:Boolean, required:true, default:false } }, { timestamps: true });

mi código de Middleware para la protección para la creación de productos

 import jwt from 'jsonwebtoken' import asyncHandler from 'express-async-handler' import userModel from '../models/user.model.js' export const productCreationProtection = asyncHandler(async(req, res, next) => { let authorizationToken; if(req.headers.authorization && req.headers.authorization.startsWith('Bearer')){ try { authorizationToken = req.headers.authorization.split(" ")[1] // decode user id const decode = jwt.verify(authorizationToken, process.env.PRIVATE_KEY) // Find the userModel and we use select to exclude password for find req.user = await userModel.findOne(decode.id).select('admin') next(); } catch (error) { res.sendStatus(401) throw new Error("You're not authorized to performe this function") } } if(!authorizationToken){ res.sendStatus(401) throw new Error("Not Authourized to performe this action") } });
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El método findOne toma un objeto como parámetro pero está pasando una cadena. Si está tratando de encontrar un usuario con una ID dada, intente refactorizar su código como se muestra a continuación:

 req.user = await userModel.findOne({ _id: decode.id }).select('admin') // Check if admin field is true if (!req.user.admin) { return "Forbidden" } next()

Esto devolverá el documento donde _id es igual a decode.id . Reemplace _id si está consultando en función de cualquier otro campo.


Alternativamente, también puede agregar un campo de administración en la consulta misma:

 const user = await userModel.findOne({ _id: decode.id, admin: true }) if (!user) { // User with given ID not found or is not an admin return "Forbidden" } next();
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda