Tag: 会话

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 […]

如何将模型方法添加到用户会话?

我有一个User模型,我在Sails.js中使用Passport.js 。 通过这个设置, req.user返回当前用户会话的详细信息,如req.user.username返回“Jimmy”,用于Jimmy的会话。 我觉得这非常方便布局的目的,我也想添加一个方法,find用户设置,可通过req.user 。 到目前为止,我的方法(在User模型中)看起来像这样: getSetting: function(code) { UserSettings.find({ where: { user: req.user.id, code: code } }).exec(function(err, setting) { return setting.value; }); } 我怎样才能使这个方法可以通过req.user ,以便当我做req.user.getSetting('TEST_CODE'); 我得到了那个用户所需的设置值? 否则,我怎样才能轻松访问用户的设置? 我有一个与User模型关联的UserSettings模型。 编辑: 用户模型我有: var User = { schema: true, attributes: { username : { type: 'string', unique: true }, email : { type: 'email', unique: true […]

passportjs + facebook +当前用户

有一些问题搞清楚如何通过我的Facebooklogin访问当前用户。 我正在使用passportJS,Node,express。 我认为我的“用户”没有保持login状态,但我无法检查。 我会上传我所拥有的,谢谢任何人对它的看法 – 真的很感激。 route.js app.get('/auth/facebook', passport.authenticate('facebook', { scope : ['email', 'public_profile', 'user_friends'] })); // handle the callback after facebook has authenticated the user app.get('/auth/facebook/callback', passport.authenticate('facebook', { successRedirect : '/profile', failureRedirect : '/' })); // route for logging out app.get('/logout', function(req, res) { req.logout(); res.redirect('/'); }); }; function isLoggedIn(req, res, next) { // […]

使用RedisStore时,有什么方法可以查看当前会话吗?

在意识到Express会话不好之后,我开始使用Redis来存储用户会话。 我是这样做的: var session = require('express-session'); if (process.env.REDISTOGO_URL) { var rtg = require("url").parse(process.env.REDISTOGO_URL); var redis = require("redis").createClient(rtg.port, rtg.hostname); redis.auth(rtg.auth.split(":")[1]); } else { var redis = require("redis").createClient(); } var RedisStore = require('connect-redis')(session); var redisOptions = {client: redis}; app.use(session({ store: new RedisStore(redisOptions), secret: 'honkydory', name: 'honk' })); 我的问题是,有没有办法让我在运行Redis数据库的时候浏览一下? 我希望能够监视是否有用户login和他们是哪些用户。 另外我想确保它正在创build和维护会话。 谢谢!

在具有不同端口号的单个服务器上运行多个sails项目不起作用

我有三个build立在帆上的项目。 每个服务器上都有3个不同的端口号(1337,1338和1339)。 其中两个项目使用“请求”。 虽然我在浏览器中的多个选项卡中打开这3个项目时,使用会话的项目会自动redirect到相应的login页面,当我在另一个选项卡中执行一些用户操作,并开始在login的用户页面中工作。 谁能说明为什么会发生这种情况 当我在其他选项卡的sails项目中做了一些操作时,没有使用会话的项目正常工作。 在这三个项目中打开一个项目在所有情况下都可以正常工作。 在同一浏览器中打开3个不同选项卡中的3个项目会造成问题。 请帮帮我。

你可以在会话中存储循环对象吗?

我正在使用Blocktrail的API来pipe理比特币钱包。 这个API返回一个钱包对象,我猜它里面包含循环引用。 我想在用户的会话中存储解密的钱包,以便用户不必再次input密码,但每当我试图做这样的事情( wallet是由API返回的钱包对象): req.session.wallet = wallet; 我得到: TypeError: Converting circular structure to JSON at Object.stringify (native) at MemoryStore.set 所以,如果一个对象有一个循环结构,有没有办法在会话中存储对它的引用? 为什么会发生?

passportjs无法validation快速会话

我正在使用passportjs来validation我的快速应用程序。 我所做的与教程代码非常相似,但validation会话总是让我烦恼。 在我的主要工作stream程中,我使用本地策略validation用户 passport.authenticate('local', function (err, user, info) { if (err) { req.flash('error', { msg: err.message }); return res.redirect('back'); } if (!user) { // punish abuser… }) .catch( function (err) { req.flash('error', { msg: err.message }); return res.redirect('back'); }); } else { // Log user in debug('Info: ' + 'Logging in'.green.bold); req.logIn(user, function (err) { […]

会话在Node.js Express上不断重置

我有一个基本的职位要求: router.post('/page',multipart(), function (req,res) { if(req.session.book=="") { console.log("Creating new session") req.session.book="Hello!" } 其中检查在名为“book”的会话variables中是否有string,如果string为空,则向其添加string。 我只希望得到一个新的会话variables,当我张贴到这条路线只有一次。 但由于某种原因,在我所做的每一个请求中,我都会得到一个控制台消息,说“创build新的会话”为什么会话variables保持重置?

NodeJS – 在套接字内部访问会话

我花了2天访问会话(login用户)通过套接字。 我已经有用户在我的MongoDB,我确实可以login/注册他们没有sockets(槽后或得到)。 我现在需要的只是套接字。 我已经尝试过这些SO解决scheme: socket.io并表示4个会话 如何与Socket.IO 1.x和Express 4.x共享会话? socket.io和会话? 并花费大量的时间search。 尝试不同的事情 我通常会得到未定义的错误或不推荐使用的错误,或者完全没有错误发生。 在遵循上面的教程之后,我自己做了一些调整,我的代码从“难以阅读”变为“太难阅读,必须从头开始”。 所以我不会把我的代码放在这里。 相反,有人可以分享他们最基本的代码来访问套接字内部的会话吗? 随着解释将不胜感激。 更新我跟着这个: 如何与Socket.IO 1.x和Express 4.x共享会话? 我有几个问题。 它仍然不起作用。 会话是空的。 难道我做错了什么? 完整代码: var express = require("express"); var Server = require("http").Server; var session = require("express-session"); var RedisStore = require("connect-redis")(session); var SESSION; var app = express(); var server = Server(app); var sio = require("socket.io")(server); […]

无法运行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)是一个空对象。 我该如何解决这个问题?