проблемы с созданием промежуточного ПО аутентификации профиля - PullRequest
0 голосов
/ 19 декабря 2018

добрый день, у меня были проблемы при попытке создать промежуточное ПО, которое заставляет пользователя редактировать свой профиль, только если он является владельцем этого профиля или администратором, я хотел бы, чтобы мне помогли и показали, где я сделалмоя ошибка, вроде новой для веб-разработки.

//the middleware created
middlewareObj.checkProfileOwnership= function(req,res,next){
    if(req.isAuthenticated()){
                              User.findById(req.params.user_id, function(err, editProfile){
                              if(err){
                                      req.flash("error", "error");
                                      res.redirect("back");
                            } 
                    else{
                         // does user own the info???
                         if(editProfile.contributor.id.equals(req.user._id) || req.user.isAdmin){
                             next();
                         } else{
                                req.flash("error","You need Permission to do that");
                                res.redirect("back");
                         }

                 }
            }); 
        }
        else{
              req.flash("error", "You need to be Logged in to do that"); 
             res.redirect("back");
            }
     };
    // the user model
var mongoose= require("mongoose");
var passportLocalMongoose= require("passport-local-mongoose");
var UserSchema= new mongoose.Schema({
    username:String,
    password:String,
    avatar: String,
    info:String,
    firstName: String,
    lastName: String,
    email: String,
    isAdmin: {type:Boolean, default:false},
    contributor:{
       id: {
           type:mongoose.Schema.Types.ObjectId,
           ref:"User"

        },
        username:String
    }

, но как только я пытаюсь ее выполнить, возникает следующая ошибка.«Ошибка типа: невозможно прочитать свойство« contributor »с нулем»

1 Ответ

0 голосов
/ 19 декабря 2018

Когда вы звоните User.findById ваш обратный вызов имеет err и editProfile.Хотя вы проверяете наличие ошибки, это не обязательно означает, что вы нашли пользователя, который будет заполнен до editProfile.Вы должны добавить в проверку, чтобы увидеть, что editProfile определено, и если нет, чтобы обработать не найти пользователя в БД на основе идентификатора, который вы передали (req.query.user.id ... Я также проверю, чтобы убедиться, что идентификатор выИщите пользователя в расположенном там и не возможно req.user._id или подобном).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...