检查用户是否使用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.'); });
- 如何使用Node.js和Passport进行身份validation后,使用自己的ID将用户redirect到主页?
- 如果Passport身份validation失败,如何在redirect时保留表单数据?
- 为api访问生成安全令牌
- 如何debugging护照
- JWT身份validation:使用UI令牌来validation石墨烯/ Django(GraphQL)查询?
- 会话身份validationtypes错误:对象#属性“types”<ServerResponse>不是函数
- 在摩卡和SuperTest中设置基本身份validation
- validationcaptcha以及passport.js
- 如何通过TwitterStrategy,PassportJS传递数据?