检查用户是否使用护照登录模板

时间:2018-10-15 03:43:37

标签: node.js express passport.js

我正在尝试检查用户是否从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);
                });
            });
        }
    ));

1 个答案:

答案 0 :(得分:0)

将您的if条件更改为if(locals.login !== "")if(locals.login !== undefined)