【问题标题】:Passport-Local-Mongoose – When I Update A Record's Username, I'm Logged Out, Why?Passport-Local-Mongoose – 当我更新记录的用户名时,我退出了,为什么?
【发布时间】:2014-07-24 06:39:27
【问题描述】:

我正在使用带有护照的 MEAN 堆栈和 Passport-Local-Mongoose 插件。但是,每当我更新用户记录的用户名时,我都会退出当前会话。使用 Passport-Local-Mongoose 更新用户名的正确方法是什么?

// Update User -- Tied to Usernames or will log out
exports.update = function(req, res) {
    user     = req.user;
    user     = _.extend(user, req.body);
    user.save(function(err, user) {
                if(err) { 
                    console.log(err); 
                    // Error handling for uniqueness violations
                    if (err.code === 11001) {
                        if (err.err.indexOf("email") != -1) {
                            return next(new Error("Email Address Already In Use"));
                        } else if (err.err.indexOf("username") != -1) {
                            return next(new Error("Username Already In Use"));
                        }
                    }
                };
     });
};

【问题讨论】:

    标签: node.js mongoose passport.js mongoose-plugins


    【解决方案1】:

    这种行为的原因是护照本地猫鼬附带的序列化/反序列化实现:

    schema.statics.serializeUser = function() {
        return function(user, cb) {
            cb(null, user.get(options.usernameField));
        }
    };
    
    schema.statics.deserializeUser = function() {
        var self = this;
    
        return function(username, cb) {
            self.findByUsername(username, cb);
        }
    };
    

    此实现使用username 字段进行序列化和反序列化。因此,如果用户名值更改,则对用户名的更改将失败。您可以通过使用自定义序列化/反序列化策略来防止这种行为,如下所示:

    schema.statics.serializeUser = function() {
        return function(user, cb) {
            cb(null, user.id);
        }
    };
    
    schema.statics.deserializeUser = function() {
        var self = this;
    
        return function(id, cb) {
            self.findOne(id, cb);
        }
    };
    

    【讨论】:

      猜你喜欢
      • 2022-07-30
      • 2018-11-07
      • 2023-03-30
      • 2021-10-13
      • 2013-07-23
      • 2012-03-28
      • 2016-01-30
      • 2016-07-03
      • 1970-01-01
      相关资源
      最近更新 更多