检查用户是否使用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.'); });
- 当它不应该时,authentication返回“401(未授权)”
- Nodejs:用户信息/数据库和authentication(Passport)
- 我们如何在node.js中使用Firebase Auth创build用户?
- 如何在单个快递服务器文件中使用两个单独的护照实例
- 使用Flux / React应用程序存储authentication详细信息
- 使用node.js和mongoose以及expressjs和passportjs进行身份validation
- 成功login后,Azureauthentication返回到login页面 – node.js
- node.js connect-auth应用程序? 例子(用户注册/用户/会话pipe理)
- 护照facebook战略投掷数据必须是使用Node.js的string