首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建配置文件身份验证中间件的问题

创建配置文件身份验证中间件的问题
EN

Stack Overflow用户
提问于 2018-12-20 03:34:35
回答 1查看 17关注 0票数 0

好天,我一直有问题,试图创建一个中间件,使用户编辑他的个人资料,只有当他是该个人资料的所有者或管理员,我希望如果我可以得到帮助,并显示我在哪里犯了我的错误,一种新的网络开发。

代码语言:javascript
复制
//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‘“

EN

回答 1

Stack Overflow用户

发布于 2018-12-20 03:39:56

当你调用User.findById时,你的回调函数有erreditProfile。虽然您确实检查了一个错误,但这并不一定意味着您找到了将填充到editProfile中的用户。您应该添加一个检查,以查看是否定义了editProfile,如果没有,则根据您传入的id (req.query.user.id...我还会检查以确保您正在搜索用户的id位于那里,而不是req.user._id或类似的位置)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53858071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档