Добавление дополнительной информации в объект пользователя в файле passport.js или где-нибудь в сеансе
Я хочу добавить пользовательские ключи в пользовательский объект, который поступает из mongodb, и который будет использоваться паспортом. js, но мне интересно, почему я не могу добавить больше ключей к этому объекту, вот мой код.
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);
});
});
Ответы
Ответ 1
См. ответ от другого вопроса:
Либо в функции десериализации, прежде чем возвращать пользователя
passport.deserializeUser(function(id, done) {
getUser(id).then(function(user) {
user.whatever = 'you like';
return done(null, user);
});
});
или в прямом промежуточном программном обеспечении (до маршрутизатора).
app.use(function(req, res, next) {
if(req.user) req.user.whatever = 'you like';
next();
});
Ответ 2
Если у вас есть вход для нескольких поставщиков и требуется, чтобы динамическое значение добавлялось к объекту пользователя.
var customKey = null;
//Store user id in session
passport.deserializeUser(function (Id, done) {
User.findById(Id, function (err, user) {
var newUser = user.toObject();
newUser['customKey'] = customKey;
done(err, newUser);
});
});
//Local login
passport.use('local.login', new LocalStrategy({
....
customKey = "isLocal";
....
// Facebook login
passport.use('facebook.login', new LocalStrategy({
....
customKey = "isFacebook";
....
Доступ к маршрутизатору:
req.user.customKey;
Использовать в шаблоне:
// in app.js
app.use(function(req, res, next) {
res.locals.user = req.user;
next();
});
//In hbs template:
{{user.customKey}}
Надеюсь помочь вам.