检查用户是否使用PassportJS / ExpressJSlogin

我有一个build立在MEAN堆栈上的Angular应用程序,使用Passportlogin和authentication用户。 我有点认识如何工作的困惑。

我有一个Angular通过$http调用的路由来检查用户是否login(因此可以访问某些页面)。 路线如下所示:

 // route to test if the user is logged in or not app.get('/loggedin', function(req, res) { res.send(req.isAuthenticated() ? req.user : '0'); }); 

从我读过的(很less,我无法在护照文档中的任何位置findisAuthenticated() …),Passport应该为我的用户创build一个持久会话。

这在大多数情况下是可行的,但是如果closures我的Chrome应用程序/重置我的电脑,我必须重新login。 我假设使用Passport将意味着我不需要创build一个散列cookie来存储login信息。 不是这样吗?

其他潜在的原因 :目前我正在开发,并经常重启服务器。 Passport会话不会通过服务器重启持续吗?

编辑:这是我在app.js会话configuration:

 var session = require('express-session'); app.use(session({ secret: 'heregoesasupersecretsecret' })); // session secret app.use(passport.initialize()); app.use(passport.session()); // persistent login sessions app.use(flash()); // use connect-flash for flash messages stored in session 

您需要使用适当的会话存储来将会话放在请求之间。 既然你在使用MongoDB,你可以使用connect-mongo 。

那么你可以做一些事情:

 var session = require('express-session'), MongoStore = require('connect-mongo')(session); app.use(session({ secret: 'heregoesasupersecretsecret', store: new MongoStore() } )); app.use(passport.initialize()); app.use(passport.session()); 

如果您在Node.js中使用护照进行身份validation,则可以使用中间件来检查身份validation。 我使用下面的代码。

 passport.use(new LocalStrategy({passReqToCallback : true}, function(req, username, password, done) { models.Accounts.findOne({ where: { username: username}}).then(function(user) { if (!user) { console.log('Unkown User'); return done(null, false, {message: 'Unknown User'}); } bcrypt.compare(password, user.password, function(err, isMatch) { if (err) throw err; if (isMatch) { req.session.username = req.body.username; return done(null, user); } else { return done(null, false, {message: 'Invalid Password'}); } }); }).catch(function(err) { return done(null, false); }); })); 

您可以在Node.js中使用快速会话库来处理用户会话。 您可以像下面一样在代码中添加一个中间件。

 app.use(session({ secret: 'track_courier_application_secret_key', cookie: { maxAge: 300000 }, saveUninitialized: true, resave: true })); 

在上面的代码中,我将maxAge设置为300K毫秒。 那是5分钟。 在此之后,会话对象将被附加到服务器的每个请求中。 您可以使用访问此会话对象

req.session

现在你可以写下如下的get请求来检查用户是否login。

 app.get('/accounts/isloggedin', function(req, res) { if(req.session.username) res.status(200).send('Hurray!'); else res.status(401).send('User not logged in.'); });