如何通过护照回调函数传递更多变量?

How to pass more variables via passport callback function?

我有以下功能:

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 字段时,这将为空。

提前致谢

您可以执行以下操作:

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

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

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

请不要忘记修改您的 serialize/deserialze 函数:

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

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