2017-12-29 22 views
3

Ich habe PassportJS Setup mit Google+ Anmelden.PassportJs isAuthenticated nicht Authentication

Die Google-Authentifizierung scheint gut zu funktionieren, aber wenn ich auf eine Seite umleiten, auf die nur ein authentifizierter Benutzer Zugriff haben sollte. Passport isAuthenticated() Funktion scheint immer zurück false

Ich habe Leute erwähnen gesehen, dass Sie sollten in der Lage den Benutzer durch die Konsolenprotokollierung zu finden: req.session.passport.user aber wenn ich log trösten req.session alles, was ich bekommen ist:

sessionID: 'Q5NaeyfnAphOK633tKjiGnbbex0KJj7e', 
    session: 
    Session { 
    cookie: 
     { path: '/', 
     _expires: null, 
     originalMaxAge: null, 
     httpOnly: true } }, 

Google Rückruf Route:

router.get("/google/callback", function(req, res, next) { 
    passport.authenticate("google", function(err, user, info) { 
     req.session.save(()=>{ 
      res.redirect("/api/v1/dashboard"); 
      console.log("after Passport AUTH"); 
     }); 
    })(req, res, next); 
}); 

Hinweis: ich habe eine manuelle req.session.save() fügte hinzu, dass die Sitzung, um sicherzustellen, wird gespeichert.

Armaturenbrett-Route:

router.get("/", middleware.isLoggedIn , function(req, res) { 
    console.log("Request: Get All Dashboard Data!"); 
    models.PortfolioBalance.findAll({ raw: true }).then(function(
     portfolioBalance 
    ) { 
     res.render("dashboard/index", { portfoliobalances: portfolioBalance }); 
    }); 
}); 

Middleware-Modul:

module.exports = { 
    isLoggedIn: function(req, res, next) { 
     console.log("==========================================="); 
     console.log("isAuthenticated: ", req.isAuthenticated); 
     console.log("==========================================="); 
     if (req.isAuthenticated()) { 
      return next(); 
     } 
     console.log("not authenticated"); 
     res.redirect("/login"); 
    } 
}; 

serialise und De-serialise:

// used to serialize the user for the session 
passport.serializeUser(function(user, done) { 
    console.log("SerializeUser:", models.User.userId); 
    done(null, user.id); 
}); 

// used to deserialize the user 
passport.deserializeUser(function(id, done) { 
    console.log("deserializeUser:", models.User.userId); 
    models.User.findOne({ where: { userId: id } }).then(function(
     err, 
     user 
    ) { 
     done(err, user); 
    }); 
}); 

potenzielles Problem:

  • Könnte es ein Problem mit passportJS nicht Serialisierung und deserialising richtig sein? Warum? weil ich nie die console.log Nachrichten an einem beliebigen Punkt während des Authentifizierungsprozesses ausgeführt sehen.

Antwort

5

Zuerst möchten Sie die Authentifizierung als Middleware verwenden, um Routen und Anmeldung zu schützen.

// put in a separate file and then import where you need it for this example lets say auth.js 
module.exports = function(){ 
    return { 
     authenticate: passport.authenticate('google', function (err,user){ 
      if(err) 
       res.redirect('/login'); 
      if(user) 
       res.redirect("/api/v1/dashboard"); 
     })(req,res); 
    } 
}; 

Wie, wenn Sie sich einloggen Sie es einrichten könnte, wie so

// where you have your routing 
var auth = require('path_to_auth.js')(); 

router.post('/login', auth.authenticate); 

Innerhalb der Google-Strategie ist, wo Sie für den Benutzer suchen möchten.

// from the passport-google npmjs.com documentation adjust for the actual strategy you use 
passport.use(new GoogleStrategy({ 
    returnURL: 'http://localhost:3000/auth/google/return', 
    realm: 'http://localhost:3000/' 
    }, 
    function(identifier, done) { 
    User.findByOpenID({ openId: identifier }, function (err, user) { 
     return done(err, user); 
    }); 
    } 
)); 

Sie auch das Benutzermodell importieren sollte dann und wie so

var User = mongoose.model('User', UserSchema); // adjust to your schema 

passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function (err, user) { 
    done(err, user); 
    }); 
}); 
deserialisieren serialisiert
Verwandte Themen