Articles of session cookies

什么是Node.js连接会话()参数中的安全选项

我正在通过以下Connect示例工作: var connect = require ('connect'); var timeout = 30000; // session timeout: 30 seconds var sessionOpts = { secret: 'keyboard cat', key: 'myapp_sid', cookie: { maxAge: timeout, secure: true} /*Example doesn't work with secure?*/ }; var app = connect () .use (connect.favicon()) .use (connect.cookieParser ('keyboard cat')) .use (connect.session(sessionOpts)) .use (function (req, res, next) { […]

req.isAuthenticated()在服务器启动一段时间后返回false

我在节点js routes.js.中实现了以下function。在任何请求被首先服务之前,检查isAuthenticated。 function isLoggedIn(req, res, next) { if (req.isAuthenticated()) { console.log('Session Expiry '+req.session.cookie.expires); console.log('Authenticated'); return next(); } console.log('Not Authenticated'); res.redirect('/'); } 但是,当我打开页面一段时间后刷新或导航到其他页面时,它会转到索引页面,而不是当前页面。我发现这是因为req.isAuthenticated()在页面加载一段时间后计算为false。 为什么会变成错误? 是不是因为序列化不当? 这是我的序列化和deserilize方法,我是否正确地做, passport.serializeUser(function (user, done) { console.log('Serializing User'); done(null, user.id); }); // used to deserialize the user passport.deserializeUser(function (id, done) { console.log('Calling Deserlize'); dbconn.user_findById(id, function (err, user) {//call to query DB console.log('Deserializing […]

使用cookie进行节点用户authentication

我将写一个负责用户身份validation的服务器API。 从我的极限知识和理解来看,当用户使用用户名和密码login时,会话将被创build,并且使用用户名的auth cookie将被保存到cookie中。 当用户请求下一页时,cookie中的用户信息将发送到服务器,服务器将识别它。 所以我的问题是如果另一个人手动复制现有的cookie信息,并在另一台计算机的浏览器中创build相同的cookie? 它会跳过login阶段吗? 任何人都可以详细解释如何防止这个细节? 谢谢

请求cookie不按预期方式返回快速会话数据

我正在尝试构build一个基本的loginfunction,并testing它是否会创build一个稍后可以使用的会话。 我正在使用express-session和redis来保存会话数据。 这是我的设置: app.use(bodyParser.json()) app.use(bodyParser.urlencoded({extended: true})) app.use(express.static(path.join(__dirname, 'client/build'))) app.use(cookieParser(process.env.COOKIE_SECRET)) app.use(session({ store: new redisStore({ host: '127.0.0.1', port: 6379 }), secret: process.env.SESSION_SECRET, cookie: {maxAge: 1800}, name: 'appName', resave: false, saveUninitialized: false })) app.use('/', routes) 然后我的login路线: router.post('/api/login', (req, res) => { req.session.userId = req.body.id req.session.email = req.body.email //do I need to send out a cookie with the session […]

Passport.js会话pipe理没有cookie

我对节点世界相当陌生。 我已经环顾了几天,我不能find现有的npm“官方”解决scheme。 如果有道歉,我希望能find合适的节点资源。 根据互联网上提供的各种实例,我实施了一份工作护照本地政策。 它运作良好 我现在想要实现会话pipe理,特别是我不想使用cookie,而是使用GET / POST参数。 其背后的原因是,我正在构build一个API服务,可能必须使用cookie /头不存在的自定义协议(而不是HTTP)。 我已经看到所有的会话支持护照的实现,他们似乎都依赖于快速/连接会话包,反过来,似乎只支持cookie和没有办法读/写会话键POST / GET参数。 在我推出我自己定制的解决scheme之前,如果存在,你能指出我已经有的东西吗?

当使用angular度$ http请求时,护照req.isAuthenticated始终返回false

我正在使用passportjs进行用户身份validation。 通过使用邮递员 ,我可以成功login和req.isAuthenticated总是返回我在login后的子序列请求为true。 通过使用angular$ http ,但是,login工作正常,但req.isAuthenticated总是在子序列请求中返回false。 我的angular度应用程序(localhost:3000)和节点应用程序(heroku)在不同的域。 我的想法是,它可能涉及CORS或会话cookie,因为我没有看到我的浏览器中的任何cookie。 我做了什么 我试图设置请求头允许CORS。 我也尝试在$ http和node app两个angular度设置Access-Control-Allow-Credentials 。 不幸的是,所有的尝试失败T_T Nodejs设置 app.use(function(req, res, next) { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', req.headers.origin); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'); if ('OPTIONS' == req.method) { res.send(200); } else { next(); } }); passport.serializeUser(function(account, done) { done(null, account.id); }); // used to deserialize the user […]

使用iisnode时保证CookieSession的安全

我通过使用iisnode与IIS使用节点,我有麻烦设置CookieSession选项secure:true 。 我在IIS上使用HTTPS,并将任何HTTPredirect到HTTPS。 但即使如此,如果我将cookieSession选项设置为secure:true ,那么login后会话将不会有任何内容。 secure:一个布尔值,指示cookie是否仅通过HTTPS发送(默认情况下为HTTP,HTTPS为默认情况下为true)。 我不得不使用secure:false来使其工作。 为什么?

快速会话:为什么在设置会话信息之前执行redirect?

还有一个“我刚刚开始学习node.js / express,现在我在这里卡住了”人。 我试过寻找答案,但我已经到了死胡同。 这是我的第一个Stackoverflow问题,所以请告诉我,如果我做了错误或非常规的事情。 我正在尝试创build一个POST请求,将一个用户对象保存到一个快速会话(在MongoDB上),并将您redirect到处理会话信息的URL。 问题是,在设置标题之前用户被redirect,并给出以下内容: Error: Can't set headers after they are sent. 这是我的代码。 我知道这是很多..对不起。 router.post() // Handler for POST requests from root page (/) router.post('/', function(req, res) { console.log("Router: A POST request for: \"/\" has been called!"); var username = req.body.username; var password = req.body.password; // Connect to database mongoose.connect(dbAddress); var db […]

设置浏览器cookie

我的问题:我的浏览器没有得到会话cookie设置。 这导致对服务器的所有请求不相互关联(例如1)进行身份validation,然后2)获取一些数据)。 背景/环境: 我正在构build一个有移动和networking端的产品。 我已经开发了这个网站,它的工作很好,所以现在我正在使用Cordova的移动应用程序(所有这些都是JavaScript)。 我想为网站使用与移动应用程序相同的后端。 在testing一切时,我只想在浏览器中运行我的应用程序,所以我不必一直模拟iOS设备,而是在浏览器中获得更好的debugging工具。 为了做到这一点,我运行一个简单的http服务器上的目录,所有我的html / css / js文件。 一切似乎都很好,直到我开始与服务器交互。 我的设置 : 服务器在localhost:3000上运行。 该cordova应用程序正在本地主机上:3001服务。 当移动应用程序加载时,它所做的第一件事是打到http://localhost:3000/api/v1/auth/isAuthenticated ,它返回{isAuthenticated: true|false} 。 端点所做的是无关紧要的。 与此相关的是,浏览器中的移动应用程序不会获取sessionId cookie,因此所有到localhost:3000上的服务器的请求都具有不同的sessionId,因此即使我能够正确地进行身份validation,下一个请求与authentication用户没有关联,因为它没有sessionId cookie。 我的问题:解决这个问题的好方法是什么? 我如何将cookie设置在刚刚触及端点的浏览器上? 我是否应该使用像oauth2orize这样的东西,并做一些令牌交换? 其他有趣的笔记: 我正在使用express.js会话。 实际上,我已经用最新的3.x版本和4.x的候选版本来尝试这个了。 这个伎俩也没有。 当我在iOS模拟器中模拟移动应用程序时,一切都很好(只是不是开发的最佳位置) 我使用CORS来允许我的localhost:3000响应来自localhost:3001的请求。 请求正在工作,这只是没有设置的cookie是问题。 鸭嘴兽是产卵的唯一哺乳动物,而不是分娩:) 谢谢!

使用Node.js,Passport进行服务器到服务器的身份validation

我有两个服务在不同的子域上运行:1)Node.js,Express,PassportJS,2)基于PHP。 这两个服务都暴露在同一个门户网站中,为了避免要求用户input凭证两次,我们从PHP服务器调用Node.jsloginAPI。 节点返回会话cookie( connect.sid ),我们转发这个客户端的域设置为<<rootdomain>>.com 。 现在,当客户端调用Node.js时,我们可以看到cookie被发送到Node,但仍然无法validation。 我已经validation了以下几点: 从PHP服务器到Node的loginAPI调用返回connect.sid cookie的成功,并将会话条目添加到Redis服务器(我们使用Redis来存储会话) Cookie在浏览器中正确设置 浏览器调用Node.js时connect.sid cookie发送到服务器 如果我们直接从客户端调用loginAPI,一切都按预期工作。 基本上独立的Node应用程序没有任何问题。 我很好奇节点是否使用用户代理,IP或什么来validationconnect.sid cookie? 或者它与Passport / Express会话参数值有关吗? 什么可能是错的? 仅供参考,目前网站没有在SSL上运行。 这是我的会议参数: store = new RedisStore({ port: 6379, host: 'localhost', client : redis }); var sess = { store: store, secret: 'some secret', rolling: true, cookie: { maxAge : 36000000, secure: false }, saveUninitialized: […]