我有以下功能:
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
字段时,这将为空。
提前谢谢
答案 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);
});