Articles of passport.js

快递:req.flash()需要会话

我有一些问题,让连接闪光灯工作,我得到的错误信息是: '错误:req.flash()需要会话' 我已经看到这可能是因为应用程序的顺序,但我不知道这是否是这种情况。 App.js: var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); var flash = require('connect-flash'); var passport = require('passport'); var app = express(); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use(session({secret: '{secret}', […]

使用护照承载器的自定义错误消息

我正在使用护照来保护我的API。 我有点努力去了解我应该如何发送自定义消息,以防万一错误,我希望能在这里find答案。 这是我做的: 路线(server.js): router.route('/Applications').get(authController.BearerAuthenticated, applicationController.getApplications); 我的护照材料(authController.js): Passport.use(new BearerStrategy(function(token, cb) { Token.findOne({token: token}, function(err, token){ if (err){return cb(null, false);} if (!token) { return cb(null, false); } return cb(null, token); }); })); exports.BearerAuthenticated = Passport.authenticate('bearer', {session: false}); 我的应用程序方法(Application.js) exports.getApplications = function(req, res) { Application.find({userId:req.user._id}, function(err, apps) { if (err) res.send(err); res.json(apps); }); }; 如果我的令牌有效并且承载方法返回 return cb(null, […]

如何找出passport / node js中的last_login_date

我已经创build了一个程序,使用节点js,护照,快递和mongo,首先你必须注册一个用户,然后你将能够login。 这是我的用户模式的样子: var UserSchema = mongoose.Schema({ username: { type: String, required: true, unique: true, index: true }, password: { required: true, type: String }, creation_date: { type: Date, default: Date.now }, last_login_date: { type: Date, default: Date.now } }) 如何找出用户上次login的时间? 我一直试图找出这一点,因为我认为这将需要发生在路线? 这是我的用户login路线: router.post('/login', passport.authenticate('local'), function(req, res) { res.json('Welcome ' + req.user.username); }); 有没有人设法为每个用户添加last_login_date? 任何线索都会有帮助!

使用PassportJS和NodeJS的Connect来validationFacebook用户

我试图使用连接将护照集成到我的nodejs服务器,但似乎无法正确执行。 所有的指南/例子使用expressJS,所以我尽我所能重新格式化代码来处理我的代码,但我似乎无法得到它的工作。 相关部分如下所示。 有没有人对这个问题有什么build议? passport.authenticate()似乎永远不会被调用(至less在Facebook身份validationcallback内的console.log消息从不打印)。 我目前没有保存任何东西到数据库,所以这个问题应该希望是一个非常简单的东西,我只是想念。 唯一想到的是我对Facebook的潜在callback,这是一个本地主机url(因为我仍然在本地开发)。 我能够通过使用everyauth(来自纯粹的本地实例)来正确validationfacebook,但转而使用passportJS,因为我遇到了PassportJS似乎要解决的不同问题。 passport = require('passport'); fpass = require('passport-facebook').Strategy; passport.serializeUser(function(user,done){ done(null, user); }); passport.deserializeUser(function(obj,done){ done(null,obj); }); passport.use(new fpass({ clientID:'facebook app id', clientSecret:'facebook app secret', callbackURL:'http://localhost:3000/auth/facebook/callback' }, function(accessToken, refreshToken, fbUserData, done){ console.log('got here'); return done(null,fbUserData); } )); function checkLoggedIn(req, res, next){ console.log("req.user: " + req.user); if(req.user) next(); else{ console.log('\nNot LOGGED IN\n'); […]

在passport.js中的serializeUser函数中访问请求对象

我正在编写使用node.js和passport.js进行身份validation的简单应用程序。 我可以访问serializeUser中的请求对象吗?

用Passport和ExpressJS进行Facebook身份validation – 为什么validationcallback没有被调用?

我是Passport在ExpressJS应用程序中对用户进行身份validation。 我试图将所有的Facebook路线放在他们自己的模块中,因为我打算支持其他OAuth提供商。 在我的启动脚本中,我定义了所需的FB端点: var express = require('express'); var routes = require('./routes'); var user = require('./routes/user'); var facebook = require('./routes/facebook'); var login = require('./routes/login'); var http = require('http'); var path = require('path'); var app = express(); /* Configuration stuff here*/ // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/login', login.index); app.get('/auth/facebook', facebook.fb_auth); app.get('/auth/facebook/callback', facebook.fb_callback); […]

connect-mongo创build的条目不会过期

我有一个使用Express设置的节点服务器,使用Passport进行身份validation。 我听说connect-mongo可以很好地用于持久login会话,所以我build立了一切,似乎一切正常,用户会话被mongo根据过期时间自动删除。 但是,在生产中,每个用户会话都有5000个其他空会话永不过期,我不知道为什么mongo不会自动清理这些会话。 mongo中的空会话示例如下所示: { "_id" : "JMtV5Z1oWRkgh9KIKlwSqwOE", "session" : "{\"cookie\":{\"originalMaxAge\":86400000,\"expires\":\"2014-02-13T22:09:09.948Z\",\"httpOnly\":true,\"path\":\"/\"},\"passport\":{}}", "expires" : Date( 1392329349948 ) } 这是Expressconfiguration代码: var express = require('express') , passport = require('passport') , fs = require('fs') , http = require('http') , https = require('https') , util = require('util') , mongoose = require('mongoose') , MongoStore = require('connect-mongo')(express) , FacebookStrategy = require('passport-facebook').Strategy , […]

req.session.passport和req.user空白,req.isAuthenticated在初次成功login后使用passport-facebook返回false

在Facebook上初次成功login并使用passport-facebook 1.0.3和express 4.6.1进行loginredirectcallback之后,req.session.passport和req.user包含serialize调用期间设置的值(我从stragegy获得),但在后续访问站点上的不同路由时,req.session.passport和req.user为空,req.isAuthenticated()返回false,因此在从FB初始成功login后,所有其他路由上的ensureAuthentication方法失败。 我没有使用集群设置,所以我相信内存存储就足够处理这个,快速configuration看起来很好(我的意思是顺序),这里是我的快速configuration configExpressApp.set('views', './views'); configExpressApp.set('view engine', 'jade'); configExpressApp.use(morgan('dev')); configExpressApp.use(cookieParser()); configExpressApp.use(bodyParser.urlencoded({ extended: true, })); configExpressApp.use(bodyParser.json()); configExpressApp.use(expressSession({ secret:'MyExpressSecret', saveUninitialized: true, resave: true })); configExpressApp.use(passport.initialize()); configExpressApp.use(passport.session()); configExpressApp.use(methodOverride()); configExpressApp.use(express.static('./public')); 这是req.session对象初始的成功login和redirect,req.user包含与req.session.passport.user相同的数据 { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, passport: { user: { _id: 53ce23e3121421f229a438f8, info: false, loginType: 'fb', fbId: 'MyId', name: 'Karthic Rao', […]

从passportjs中的刷新令牌获取oauth访问令牌

要确定何时使用刷新令牌来请求新的访问令牌,我知道两种方法(下面)。 无需修改passport-google-oauth库,这两种方法都可行吗? 1)“先发制人”的方法 保存授权后的访问令牌的到期时间 每当使用访问令牌访问API时,请根据当前时间检查到期时间 如果访问令牌没有过期,请使用它来访问API 如果访问令牌已过期(或接近过期),请提供刷新令牌以获取新的访问令牌 2)“处理失败”方法 始终提供访问令牌 如果访问令牌未通过身份validation,请提供刷新令牌,以获取新的访问令牌 谢谢。 也欢迎任何替代品。

如何保持活动的NodeJS护照会话

我们是Node + Express + Passport进行身份validation,并将会话信息保存到Redis。 我在session cookie上设置了maxAge,在一个小时内超时。 这一切似乎工作正常,但问题是,会话Cookie将在一个小时内过期,无论用户的活动。 有没有办法手动刷新/保持会话cookie?