Проверьте, вошел ли пользователь в шаблон с паспортом - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь проверить, вошел ли пользователь в EJS-шаблоны:

<% 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('/');
}

ОБНОВЛЕНИЕ

Вот так я вхожу в систему

    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);
                });
            });
        }
    ));

Но это не меняет мою кнопку в шаблоне после входа пользователя.Как я могу это сделать?

это то, что у меня есть у местных жителей из шаблона EJS:

{
  "settings": {
    "x-powered-by": true,
    "etag": "weak",
    "env": "development",
    "query parser": "extended",
    "subdomain offset": 2,
    "trust proxy": false,
    "views": "/Users/filipeferminiano/MEGA/altcoin-site/views",
    "jsonp callback name": "callback",
    "view engine": "ejs"
  },
  "message": [],
  "_locals": {},
  "cache": false
}

1 Ответ

0 голосов
/ 15 октября 2018

Измените условие if на if(locals.login !== "") или if(locals.login !== undefined)

...