Articles of passport.js

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?

PassportJS自定义validationcallback未调用

更新:下面的错误是由提交修复的。 我已经把第一个答案标记为“正确的”,尽pipe在其中一个评论中引起了我的注意 我希望利用自定义callback来处理loginPassport的身份validation本地策略的成功和失败,但它看起来只是成功调用。 这里是我正在谈论的一个片段: passport.use(new LocalStrategy( {usernameField: 'email', passwordField: 'password'}, function(email, password, done) { if(canLogin) done(null, user); else done({message: "This is an error message" }, false, { message: "Some Info" }); } )); app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { // Only called if err is not set }); 任何想法,为什么这可能是这样的? 我以为这个callback会被调用,所以我可以自己处理错误。

Node.js + Passport:done()方法中第三个参数'info'会发生什么?

我发现done()方法(或success() ,由我的debugging器告诉)有第三个参数以及称为info 。 谁能告诉我什么值得传递给它? 编辑 我所指的done()方法是我们必须在策略callback中调用的方法。 例如 var passport = require('passport') , LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( function(username, password, done) { User.findOne({ username: username }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username.' }); } if (!user.validPassword(password)) { return done(null, false, { message: […]

使用Facebook和Passportjs进行身份validation:什么是accessToken,注册后应该存储什么?

我正在使用Passport来注册/使用Facebook进行身份validation。 oAuth成功的时候,我回来了: accessToken refreshToken profile 现在…当用户成功注册使用Facebook,我存储accessToken和profile信息。 当有人想要login,并再次通过oauth动作,我的应用程序再次获取accessToken和profile 。 麻烦的是, accessToken是不同的。 我真的希望accessToken是第一次validation后是相同的… 在这一点上,我连接我自己的本地用户与configuration文件中的Facebook的id字段。 但是…我怎么实际上使用accessToken? 保持它是否有意义? 如果是这样,为什么我会保留它? 我实际上期望accessToken是相同的,并使用它来匹配成功的login。 我显然不能这样做…所以我很困惑!

PassportJS – 自定义callback并将Session设置为false

是否有可能使用自定义callback和禁用会话? 在文档中,它显示了如何禁用会话和自定义callback,但我如何将它们合并? app.get('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.logIn(user, function(err) { // I'm getting an error here // [Error: Failed to serialize user into session] if (err) { return next(err); } return res.redirect('/users/' + user.username); }); })(req, res, next); […]

Node.Js + express +护照:无法注销用户

我为Web服务器编写了一个JS脚本,其中包括使用护照和摘要策略的身份validation。 我不使用会话,但我已经尝试使用会话,它不会改变结果。 浏览器请求“/ login”路由并显示一个内置的login对话框。 validation工作正常,但我不能让用户“注销”。 问题似乎是浏览器记住login凭证并自动重新发送。 最终的结果是用户必须完全closures浏览器才能注销,但这对于此应用程序来说是一个问题。 我知道必须有办法告诉浏览器不要这样做,但我还没有弄明白。 我想出了一个破解让浏览器再次显示login对话框; 强制authentication函数返回false。 但是,我还没有想出一个方法来做到这一点每个会话。 现在,如果一个人注销,每个人都注销。 这不是一个可行的解决scheme。 有谁能告诉我我在做什么错在这里? 有一件事,我想知道的是,当我的浏览器发布到/ logout路由时,是否返回正确的响应(请参见结束)。 我返回res.json(“”),但也许有一个不同的响应,我应该发送告诉浏览器忘记会话的凭据? 我的代码如下。 任何有识之士都非常感激。 先谢谢你。 Ť var passport = require('passport'), DigestStrategy = require('passport-http').DigestStrategy; var express = require('express'); var app = express(); app.configure(function () { app.use( "/", //the URL throught which you want to access to you static content express.static('./www') //where […]

如何通过Passport / Facebook战略authenticationSupertest请求/?

我使用Passport.js进行身份validation(Facebook策略),并使用Mocha和Supertest进行testing。 我如何创build一个会话,并与Supertest Facebook的策略进行authentication的请求? 以下是用户未login时的示例testing: describe 'when user not logged in', -> describe 'POST /api/posts', -> it 'respond with 401', (done)-> request(app). post(API.url('posts')). set('Accept', 'application/json'). send(post: data). expect('Content-Type', /json/). expect(401, done) 谢谢你的build议:D

Passport.js github策略callback总是返回“TypeError:无法设置属性'用户'未定义的”

我一般都是新来的护照authentication,并且正在尝试使用github策略passport-github创build一个简单的Express应用程序。 我已经成功使用谷歌和叽叽喳喳策略下面的基本相同的代码,但每次我尝试合并github策略时,我得到一个500响应与此错误,每当我点击callback路线: 无法设置未定义的属性“用户” TypeError:无法设置未定义的属性'user' at /Users/dan/Repos/passport-github-portal/node_modules/passport-github/node_modules/passport-oauth/node_modules/passport/lib/passport/http/request.js:45:35 (/Users/dan/Repos/passport-github-portal/node_modules/passport/lib/authenticator.js:267:43) 在序列化(/ Users / pass / pass / passport / 在/Users/dan/Repos/passport-github-portal/app.js:49:7 (/Users/dan/Repos/passport-github-portal/node_modules/passport/lib/authenticator.js:284:9) 在Authenticator.serializeUser(/Users/dan/Repos/passport-github-portal/node_modules/passport/lib/authenticator.js:289:5) IncomingMessage.req.login.req.logIn(/Users/dan/Repos/passport-github-portal/node_modules/passport-github/node_modules/passport-oauth/node_modules/passport/lib/passport/http/request.js: 43:29) 在Strategy.strategy.success(/Users/dan/Repos/passport-github-portal/node_modules/passport/lib/middleware/authenticate.js:228:13) (/Users/dan/Repos/passport-github-portal/node_modules/passport-github/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18) 在/Users/dan/Repos/passport-github-portal/app.js:25:9 我的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 passport = require('passport'); var session […]