Reputation: 1
I am making an app using NodeJS, Express and Passport, but I am facing a problem with displaying user data in the views.
I get the ObjectID of the user in res.locals.user, but data from it like name, email, etc is returned as "undefined". For example, console.log(res.locals.user) returns "5ef5ddd2e67f9e2918e79bcb" but console.log(res.locals.user.name) or console.log(user.name) returns "undefined".
For clarification:
In the EJS, if I put <%= user %>
it shows the object ID of the user from the database. If I put <%= user.name %>
it doesn't render and console shows "undefined".
Here is my passport-local-strategy.js:
const express = require('express');
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/users');
passport.use(new LocalStrategy({
usernameField: 'email'
},
function (email, password, done) {
User.findOne({ email: email }, function (err, user) {
if (err) {
console.log('Error in finding user --> Passport');
return done(err);
}
if (!user || user.password != password) {
console.log('Invalid username or password');
return done(null, false);
}
return done(null, user);
});
}
));
passport.serializeUser(function (user, done) {
done(null, user.id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
if (err) {
console.log('Error in finding user --> Passport');
return done(err);
}
return done(null, user.id);
});
});
passport.checkAuthentication = function (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
return res.redirect('/users/sign-in');
};
passport.setAuthenticatedUser = function (req, res, next) {
if (req.isAuthenticated()) {
res.locals.user = req.user;
console.log(res.locals.user);
}
next();
}
module.exports = passport;
Upvotes: 0
Views: 478
Reputation: 1
I fixed it by assigning res.locals.user to User.findById with an async and await block.
passport.setAuthenticatedUser = async function (req, res, next) {
if (req.isAuthenticated()) {
res.locals.user = await User.findById(req.user, function (err, user) {
if (err) {
console.log('Error in finding user --> Passport');
}
return;
});
}
next();
}
Upvotes: 0