美好的一天,我一直在尝试创建一个中间件时遇到问题,该中间件仅在用户是个人资料的所有者或管理员的情况下才允许用户编辑其个人资料,如果需要我的帮助并显示我在哪里制作,我希望我的错误,是Web开发的新功能。
//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
}
但是一旦我尝试执行它就会带来以下错误。 “ TypeError:无法读取null的属性'contributor'”
答案 0 :(得分:0)
当您呼叫User.findById
时,您的回叫有err
和editProfile
。在检查错误时,并不一定意味着您找到了将填充到editProfile
的用户。您应该添加检查以查看是否定义了editProfile
,如果未定义,则要处理以根据您传入的ID在数据库中找不到用户(req.query.user.id
...确保您在其中搜索用户的ID位于此处,而不是req.user._id
或类似名称)。