在password.js或会话中某处的用户对象中添加其他信息 [英] Adding extra information in user object in passport.js or somewhere in session

查看:103
本文介绍了在password.js或会话中某处的用户对象中添加其他信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在来自mongodb的用户对象中添加自定义键,这将由Passport.js使用,但是我想知道为什么我不能向该对象添加更多键,这是我的代码. /p>

I want to add custom keys in the user object that is coming from mongodb and that is going to be used by passport.js but i wonder why i can't add more keys to that object, here is my code.

passport.use(new LocalStrategy(
    function(username, password, done) {
        Users.model(false).findOne( {email:username,password:encodePassword(password) }, function(err, user) {
            if( err ){ // validation failed
                console.log('Error Occurred');
                return done(err);
            }
            else if(user != null){

                user['customKey'] = "customValue"; // it is not setting

                console.log(user);

                return done(null, user);
            }
            else {

                return done(null, false, { message: 'Incorrect username.' });
            }
        });
    }
));
///Session handling
passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    Users.model(false).findById(id, function(err, user) {
        done(err, user);
    });
});

推荐答案

请参见另一个问题:

在反序列化功能中,要么在返回用户之前

Either in the deserialization function, before returning the user

passport.deserializeUser(function(id, done) {
    getUser(id).then(function(user) {
        user.whatever = 'you like';
        return done(null, user);
    });
});

或在快速中间件中(在路由器之前).

or in an express middleware (before the router).

app.use(function(req, res, next) {
    if(req.user) req.user.whatever = 'you like';
    next();
});

这篇关于在password.js或会话中某处的用户对象中添加其他信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆