我正在尝试检查用户是否从EJS模板登录:
if (!this.selectedCourse) invalidCourse = true;
我将中间件定义为:
<% if(locals.login){ %>
<button>logout</button>
<% } else { %>
<button>login</button>
<% } %>
更新
这就是我登录的方式
exports.ensureAuthenticated = function(req, res, next) {
if (req.session.passport) {
res.locals.login = req.session.passport;
return next();
}
res.redirect('/');
}
但这不会在用户登录后更改模板中的按钮。我该怎么办?
这是我从EJS模板中获得的本地信息:
app.get('/auth/google',
passport.authenticate('google', { scope : ['profile', 'email'] }));
app.get('/auth/google/callback',
passport.authenticate('google', {
successRedirect : '/portfolio/crypto',
failureRedirect : '/portfolio/crypto'
}));
passport.serializeUser(function(user, done) {
console.log("----------- serializeUser");
// var sessionUser = {environment_hash: user.environment_hash, is_logged: true};
// var sessionUser = user.id;
// console.log(user.id);
console.log("----------- end serializeUser");
done(null, user.id);
// done(null, user.environment_hash);
// done(null, sessionUser);
});
passport.deserializeUser(function(sessionUser, done) {
console.log("----------- deserializeUser");
console.log(sessionUser);
User.findById(sessionUser)
.then( user => {
console.log(user);
done(null, user);
})
.catch( err => {
console.error(err);
done(err);
});
});
passport.use('google', new GoogleStrategy({
clientID : process.env.GOOGLE_CLIENTID,
clientSecret : process.env.GOOGLE_CLIENTSECRET,
callbackURL : process.env.GOOGLE_CALLBACKURL,
passReqToCallback: true,
},
function(req, token, refreshToken, profile, done) {
console.log("----------- req.session");
console.log(req.session.passport);
res.locals.login = req.session.passport;
console.log("----------- end req.session");
process.nextTick(function() {
// console.log(profile);
var values = {
where: { google_id: profile.id },
defaults: {google_id: profile.id, name: profile.displayName}
};
User.findOrCreate(values)
.spread(function(user, created) {
return done(null,user);
});
});
}
));
答案 0 :(得分:0)
将您的if条件更改为if(locals.login !== "")
或if(locals.login !== undefined)