Articles of 会话

获取用户ID socket.io,护照,koa

我正在使用Koa,Passport.js和koa会话来validation用户。 所以它基本上是这样的: // session var session = require('koa-session'); app.keys = [config.secret]; app.use(session()); // auth require(__dirname+'/lib/auth'); // de/serializeUser, strategies etc.. var passport = require('koa-passport'); app.use(passport.initialize()); app.use(passport.session()); 这很好。 在请求我有req.user ,与用户ID。 但是,当使用套接字时,我可以这样做: io.on('connection', function(socket) { console.log(socket.request.headers.cookie), }); 但是,当然,这只是encryption的会话ID,我怎么能反序列化的用户,并得到user.id就像我得到req.user得到或请求后? 先谢谢你。

req.session.passport和req.user空,serializeUser和deserializeUser都不会被调用

我正在使用Express(v4.11.2)与护照,以支持多个提供商(本地,脸谱,微博和谷歌)访问我正在build设的networking应用程序。 作为后端,我使用的是mysql。 现在我有两个本地策略:本地注册和本地login。 我遇到的问题是,req.session.passport和req.user总是空的,实际上,serializeUser和deserializeUser永远不会被调用。 这里是快递和护照的设置: var bodyParser = require('body-parser'); var session = require('express-session'); var MemoryStore = session.MemoryStore; var _ = require('underscore'); var passport = require('passport'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use(session({ key: 'KEY', secret: 'SECRET331156%^!fafsdaasd', store: new MemoryStore({reapInterval: 60000 * 10}), saveUninitialized: true, resave: false })); app.use(passport.initialize()); app.use(passport.session()); require('./config/passport')(passport); // pass passport for configuration 这里是身份validation策略的护照文件: module.exports = […]

MongoDB与Redis的用户会话?

我需要加载一些很less更改的信息字段,用于validation用户可能访问的路由。 目前,我查询mongodb,并将这些字段与redis中的任何特定状态信息一起存储在用户login时由'user:' + mongodb_user_objectid键入的单个散列中。 然后,我为http cookie创build一个会话,并将此密钥存储为redis中的string,并由'sess:' + session_id作为键。 如果其中一个validation字段可能发生变化,是不是应该从mongodb中复制字段并处理redis和mongodb的更新? 在没有使用redis作为中间人的情况下,直接从/向mongodb读取和写入会话信息是否会有显着的性能差异?

在Express.js中使用会话MemoryStore不定义req.session

我用Express.jsbuild立了一个Node.jstesting服务器,如下所示: var express = require('express'); var MemoryStore = express.session.MemoryStore; var app = express.createServer(); app.configure(function() { app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(app.router); app.use(express.session({ store: new MemoryStore(), secret: 'secret', key: 'bla' })); }); app.get('/', function(req, res){ console.log(req.session); res.end("html"); }); app.listen(3000); 为什么console.log(req.session)打印出未定义? 我没有正确使用它吗? 为了将variables保存到用户的会话中,我需要做些什么? 客户收到一个存储为他的cookie的SID,但是我不能给req.session分配任何属性,因为它没有被定义。 感谢任何提示,以解决这个问题! 🙂 这是我使用的版本: ├─┬ express@2.5.9 │ ├─┬ connect@1.8.7 │ │ └── formidable@1.0.9 │ ├── mime@1.2.4 │ […]

节点js,使用connect-memcached时不返回任何响应

您好我正在使用compoundjs和connect-memcached。 以下是我的envirionment.js文件中的内容: module.exports = function (compound) { var express = require('express'); var MemcachedStore = require('connect-memcached')(express); var app = compound.app; require('./mongoose').init(compound); app.configure(function(){ app.use(compound.assetsCompiler.init()); app.use(express.static(app.root + '/public', { maxAge: 86400000 })); app.set('view engine', 'ejs'); app.set('view options', { complexNames: true }); app.set('jsDirectory', '/javascripts/'); app.set('cssDirectory', '/stylesheets/'); app.set('cssEngine', 'stylus'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.favicon()); app.use(express.logger()); app.use(express.cookieParser()); app.use(express.session({secret: 'AuthenticationSecret', store: new MemcachedStore})); app.use(app.router); […]

loginTwitter OAuth没有会话aka token_secret(AngularJS失败)

这是来自angularjs卫星例子的一条快速路线,实现了3条腿的OAuth与Twitter: /* |————————————————————————– | Login with Twitter |————————————————————————– */ app.get('/auth/twitter', function(req, res) { var requestTokenUrl = 'https://api.twitter.com/oauth/request_token'; var accessTokenUrl = 'https://api.twitter.com/oauth/access_token'; var authenticateUrl = 'https://api.twitter.com/oauth/authenticate'; if (!req.query.oauth_token || !req.query.oauth_verifier) { var requestTokenOauth = { consumer_key: config.TWITTER_KEY, consumer_secret: config.TWITTER_SECRET, callback: config.TWITTER_CALLBACK }; // Step 1. Obtain request token for the authorization popup. request.post({ url: requestTokenUrl, oauth: […]

会话cookie在Electron中不起作用

我正在考虑在我正在构build的Electron [0]应用程序中实现一个login系统,但是在处理会话的过程中遇到了困难。 基本上我想存储用户会话,以便在应用程序重新启动之间持续存在(如果启用了“记住我”function)。 我必须利用现有的后端与cookie身份validation,我不能改变任何东西。 从Session对象的Electron文档[1]我收集到,我应该使用像persist:someName这样的分区,以便拥有一个持久存储,但是在应用程序重新启动之间,这看起来并没有持续存在。 我目前设置cookie的方式如下: // main-process/login.js const session = require('electron').session; const currentSession = session.fromPartition('persist:someName').cookies; currentSession.set({ name: 'myCookie', url: 'https://www.example.com', value: 'loggedin=1', expirationDate: 1531036000 }, function(error) { console.log('Cookie set'); if (error) { console.dir(error); } }); 运行后,我看到Cookie set输出,但重新启动应用程序并运行以下代码: // main.js const session = require('electron').session; const currentSession = session.fromPartition('persist:someName').cookies; currentSession.get({}, function(error, cookies) { console.dir(cookies); if (error) […]

节点会话没有正确保存

我在节点会话中看到一些非常奇怪的事情。 我正在使用express-session和connect-mongo保存会话。 我的会话设置如下(所有请求都通过https): var session = require('express-session'); var MongoStore = require('connect-mongo/es5')(session); var sess = {}; app.use(session({ secret: 'xxxx', saveUninitialized: false, store: new MongoStore({ mongooseConnection: mongoose.connection, ttl: 60 * 30 // haf hour }), cookie: { secure: true } })); 我有一个使用节点canvas创build图像的path: app.get('/api/canvas', function(req, res) { sess = req.session; console.log('in canvas and sess is ', sess); // […]

在express.js中查看当前所有活动的会话

我发现了许多其他语言的类似问题 – ASP.net,Django等…但是,我对Node.js的Express.js感兴趣。 我如何查看当前活动的所有会话?

使用Express.js v4和Socket.io v1进行会话

如何在express.js中保存会话数据并在socket.io事件中访问它? 我正在使用express.js v4 , socket.io v1和基本的快速会话中间件来开发web应用程序。 我花了几个小时试图解决这个问题,但堆栈溢出的所有当前答案只适用于expressionv3和socket.io v0.9。 不幸的是,我不能使用express.io,因为它只是一个使用这些旧版本的包装器。 我目前的解决scheme是彻底的黑客攻击 app.get('/auth', function(req, res) { if(verified(req.query)) { authed[req.sessionID] = true; } }); io.sockets.on('connection', function(websocket) { var cookies = cookie.parse(websocket.handshake.headers.cookie); var decrypted = cookieParser.signedCookies(cookies, random); var sessionID = decrypted['connect.sid']; websocket.on('input', function(input) { if(authed[sessionID]) { // Do stuff… } }); }); 我将基于会话ID的“会话数据”保存在对象中作为键/值存储区。 这对于单个进程应用程序来说工作得很好,但它确实不是一个好的解决scheme。 它实际上并没有给我访问保存在req.session中的任何东西,如果过程结束,我保存的所有数据都将丢失。 最重要的是,我需要加载第三方的cookie包来parsing来自socket.io的cookiestring。 似乎新版本的Cookieparsing器没有使用它的函数来parsingstring中的cookie。 至less,没有logging。 有一个更好的方法! […]