如何通过护照回调函数传递更多变量?
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);
});
我有以下功能:
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);
});