如何通过护照回调功能传递更多变量?

时间:2015-03-15 10:52:07

标签: javascript node.js express passport.js node-mysql

我有以下功能:

passport.use(new LocalStrategy(
    function (username, password, done) {

        connection.query('SELECT * FROM accounts WHERE username = ?  LIMIT 1', [username], function (err, rows, fields) {
            if (!err) {
                if (rows.length > 0) {
                    var row = rows[0];
                    var passwordHash = require('crypto').createHash('sha1').update(password).digest('hex');

                    if (!passwordHash.localeCompare((row.password))) {
                        return done(null, {username: row.username});
                    }
                }
            }
        });
    }
));

当身份验证成功时,我想传递更多字段而不仅仅是用户名。所以,我已将我的代码更改为:

 if (!passwordHash.localeCompare((row.password))) {
      return done(null, {username: row.username, role: row.accountType});
 }

但是,当我在模板中调用user.role字段时,这将为空。

提前谢谢

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

var row = rows[0];
var passwordHash = require('crypto').createHash('sha1').update(password).digest('hex');

if (!passwordHash.localeCompare((row.password))) {
       return done(null, row);
 }

这将传递结果行中的所有字段。如果要跳过某些字段,可以创建一个对象,分配必要的字段,然后将其作为done()函数中的参数传递。

请不要忘记修改序列化/反序列化功能:

passport.serializeUser(function (user, done) {
done(null, user);
});

passport.deserializeUser(function (user, done) {
    done(null, user);
});