Tag: cookie

如何在NodeJS的socket.io中访问Cookie会话中间件?

我决定在我的应用程序中使用socket.io,并偶然发现了一个问题。 我使用cookie-session进行快速授权: var session = require('cookie-session'); var app = express(); // … app.use(session({ keys: ['secretkey1', 'secretkey2'] })) // … app.get('/settings', function(req, res) { res.type("html"); if (!req.session.sid) { console.log("NO SID"); req.session.sid = util.randomString(); } else { console.log("sid:" + req.session.sid); } // doing stuff with req.session.sid var jadeView = { /*…*/ }; res.status(200).send(mainJade(jadeView)); }); 现在我使用socket.io。 我想出了如何访问cookie: io.sockets.on('connection', […]

获取快速编码的cookie作为标题值

请参阅通信描述 客户端— POST /login(没有cookie)—>节点服务器 Node Server —>'set-cookie':'…' – > Client(设置cookie并将其用于下一个请求) 在第一个请求发送给客户端之前,我怎样才能得到设置为set-cookie头的cookie的编码值? Express 3.x,cookieParser,expression式会话和一个mongo作为存储被使用。 我试过了: 访问req.cookies但不填充第一个请求,因为客户端还没有一个cookie。 res.getHeader('set-cookie')返回undefined也许是因为它是在express-session调用express express handler之后设置的。 在服务器端,即使request.cookie为空,我如何才能访问我的处理程序中的set-cookie头或响应对象中的cookie值?

HapiJS代理故障

TL; DR 如何拦截一个请求,为一个ID ping不同的路由,将ID存储在一个会话中,然后使用刚刚得到的ID继续原始请求(特别是带有有效载荷的PUT / POST)? 背景 我正在使用HapiJS(8)将来自客户端的请求代理到现有的API(我无法控制进程/逻辑)。 API要求每个请求在查询string或有效负载中包含“会话ID”(取决于http方法)。 为了获得一个会话ID,我所要做的就是要求一个…没有用户名/密码要求(它使用标题中的基本身份validation)。 会话ID如果不更新,则每24小时过期一次。 每个客户都有自己的会话ID。 我目前正在使用hapi-auth-cookie来存储会话ID的值,当需要ID时会被查询。 如果ID过期或为空,我需要请求一个新的客户端的请求才能成功地代理到API。 当前解决scheme 当客户端的请求方法是'GET'时,我正在使用hapi-auth-cookie文档中描述的appendNextconfiguration来非常优雅地处理这个挑战。 这个请求被hapi-auth-cookie拦截,如果需要一个新的会话ID,请求被发送到那个特定的路由来获取它,API返回然后​​分配给Hapi会话的ID,然后(使用Wreck ) reply.redirect返回到完成的原始GET请求。 无缝和优雅。 但是,我不知道如何用不同的包含数据有效载荷的http方法来完成同样的stream程。 除了reply.redirect之外,还有什么能够完成同样的目标,同时保持原始的有效载荷和方法? 还是有更好的方法来做到这一点? 代码(目前适用于“GET”请求的代码) 主要应用程序文件(hapi-auth-cookieconfiguration) # register plugins server.register require('./plugins') , (err) -> throw err if err # set authentication (NLS) configs server.auth.strategy 'session', 'cookie', password: 'session_pwd' cookie: 'ghsid' redirectTo: '/api/SessionID' #get new session ID […]

无法运行node-redis-session lib

我已经安装了node-redis-session依赖关系,并且在第一次运行正常,但是我已经删除了浏览器创build的cookie,现在我不能再运行了。 这是错误信息 TypeError: Object object has no method 'hasOwnProperty' at ~/../server/node_modules/node-redis-session/lib/index.js:57:22 这是代码的摘录(第57行) var sid; if (!req.cookies.hasOwnProperty(cookieName)) { //easy to find in redis with command "keys * s|*" sid = 's|'+generateSid(); req.cookies[cookieName] = sid; res.cookie(cookieName, sid, { expires: new Date(new Date().getTime()+expireTime), httpOnly: true }); } 如果你做一个console.log(req.cookies)是一个空对象。 我该如何解决这个问题?

为什么nodejs / cookie中的cookie签名使用sha1-hashing来比较签名?

我只是看着执行cryptograhic签名扩展的快递,允许创build签名的cookie。 签名函数中的mac按照此处所述进行计算: 创build一个SHA256的实例 散列数据值 创build一个base64编码的摘要 删除结尾的相等字符('=') 结果是原始值和计算出的mac的连接。 在validation签名时,值再次被签名。 但是,然后不对签名进行相等testing,但是比较由原始值和附加的mac组成的整个string: return sha1(mac) == sha1(val) ? str : false; 这里“mac”包含原来的值与一个新计算的mac连接,“val”包含传递给validation方法的inputstring(包含与原mac连接的原始值),“str”是有符号值本身。 请参阅: https : //github.com/tj/node-cookie-signature/blob/master/index.js 我本来预料只有苹果机才会被比较。 但这种情况并非如此。 为什么作者select这种实施validation的方式? 这是什么原因? 特别是:为什么他们不把字符与char1进行比较,而是对sha1进行比较?

我可以使用同一个服务器的passport.js会话login到其他服务器吗?

我正在使用express服务器 passport.js和我有在端口3000上运行的示例回购 。 我希望能够像使用示例一样使用端口3000来login护照,并且可以在另外两个运行在不同端口(8000和9000)上的其他节点服务器上创build会话。 所有3台服务器都在本地主机上。 在我想要的其他服务器之一 app.all('*', require('connect-ensure-login') .ensureLoggedIn("http://localhost:3000/login")); 只有当用户在localhost:3000上login时才能访问整个其他服务器。 用我上面的build议代码,如果我导航到http:// localhost:8000 / somepage ,它将redirect到http:// localhost:3000 /login是否我login在3000或不。 它不会识别我已login3000。

成功的请求,但没有设置cookie

当我向Postman(api服务)的服务器发出请求时,chrome自动生成一个cookie。 但是,当我向我的nodejs服务器发出请求时,即使请求成功,也不会产生cookie。 //Headers var options = { method: 'GET' }; options.headers = {}; options.headers.Authorization = auth; options.url = urlm; console.log(options); request(options, function(error,response,body) { res.status(200).send(response.headers); }); 响应标题是 {“date”:“Tue,23 Feb 2016 20:06:57 GMT”,“server”:“Jetty(9.2.1.v20140609)”,“x-csrf-header”:“X-CSRF-TOKEN”, “expires”:“星期四1970年1月1日00:00:00 GMT”,“x-csrf-token”:“xxxxxxxxxxx”,“cache-control”:“no-store”,“content-type”:“audio / MPEG”, “设定的cookie”:[ “JSESSIONID = uiqwnksadbohqjkq675d;path= /;的HttpOnly”], “连接”: “closures”, “传输编码”: “分块”}

如何在node.js中创build会话

在Node.js / Mongodb中,我想创build一个简单的会话,并将其提供给另一个页面,以便我可以知道用户是否已login。 我想知道他是否可以访问该页面,我该怎么做? 如何设置会话,以及如何获取值以检查是否必须redirect用户。 非常感谢!

如何使用来自其他站点的login信息进行JavaScript请求

我有以下情况。 我有一个网站运行node.js用户可以login,然后执行任务使用各种JavaScript API调用。 当他们login时,我给他们分配一个cookie,这是在做所有的web请求时使用的,这样我可以跟踪他们已经做了多less请求。 现在我想让另一个网站B也能够使用由网站A提供的API。我所拥有的问题是网站B上的用户如何获得允许他们向网站A发出请求的cookie,而不必到站点A并在那里login。 如果我使用某个默认账户进行跨域GET请求login,我无法从中提取响应中分配的cookie。 如果可能的话,我会避免使用类似SECRET_KEY参数在从站点B到A的获取请求中,因为我使用节点会话模块,它根据Cookie加载会话。

是唯一的方法来给客户从服务器执行一些js代码的指令?

或换句话说: 如何发送一个客户端的消息从服务器执行一些页面上的JS代码? 这不是一个Ajax请求,它是一个普通的GET浏览器服务器请求。 比方说,我在我的应用程序的前端JavaScript文件中有这样的代码: if( condition_1 ) { FB.getLoginStatus(…) } else if( condition_2 ) { PayPal.getLoginStatus(…) } else { do smth else… } 所以我想发送那些condition_1或者condition_2指令以及服务器的响应。 这不是Ajax请求。 这是从浏览器到服务器的简单的GET请求。 目前只有cookies出现在我的脑海里。 1)服务器从浏览器收到GET请求。 2)我读了cookies。 如果没有一定的cookie伴随着请求,我设置condition_1 ,否则我设置condition_2 cookie: if(req.cookies["foo"] == "foo") { res.cookies("foo", "condition_1") .status(200) .send() .end(); } else if(req.cookies["foo"] == "bar") { res.cookies("foo", "condition_2") .status(200) .send() .end(); } 3)服务器发回一个200响应给客户端。 现在在浏览器中我检查这些cookie(为了简单起见,我做了document.cookie.foo […]