Tag: 会话

未定义的req.session和req.session.user_id不起作用

我使用Express和节点进行会话pipe理。 我想使用express创build一个会话,以便在redirect到公用文件夹中的静态文件之前进行身份validation和会话。 以前我有一个问题麻烦使用express.session与https但它解决了通过在express.session中包含path作为/ public但现在我的req.session显示为未定义,但在浏览器中有connect.sid cookie存在 app.js是: var express = require('express')TypeError: Cannot set property 'user_id' of undefined at /opt/expressjs/app.js:59:24 at callbacks; var http = require('http'); var https = require('https'); var fs = require('fs'); var mongo = require('mongodb'); var monk = require('monk'); var db = monk('localhost:27017/svgtest1'); var options = { key: fs.readFileSync('privatekey.pem'), cert: fs.readFileSync('certificate.pem') }; var app […]

简单的Expressjs应用程序没有响应

我正在努力升级到expressjs 4.0。 下面这个非常简单的代码将请求挂到http://localhost:3000/并且没有任何重新排列的东西可以解决这个问题。 但是,如果我注释掉cookie-parser,body-parser和express-session的app.use()语句,它就会起作用。 显然我需要他们,所以留下他们评论出来是不是一个选项。 我知道我做错了,这很简单,但我无法看到它。 有人能给我一个正确的方向推动吗? var express = require('express') , cookie = require('cookie-parser') , body = require('body-parser') , session = require('express-session') , http = require('http'); var app = express(); var router = express.Router(); app.use(cookie); app.use(body); app.use(session({ secret: 'bigsecret' })); router.get('/', function(req, res, next) { res.send('Welcome'); }); app.use(router); app.set('port', process.env.PORT || 3000); http.createServer(app).listen(app.get('port'), function(){ […]

在HTML5全局sessionStorage对象上使用快速会话有什么好处?

我的理解是,在节点顶部使用express的应用程序中,可以通过req.session来访问会话对象,可以在其上设置任意数量的键/值对。 使用这种方法在DOM中的全局sessionStorage对象上存储键/值对的优点是什么?

Node.js ExpressJs创build会话

如何在expressjs(4.0)中创build会话? 我在链接中完全一样 var session = require('express-session'); /* session */ app.use(session({ secret: '1s2sd25asd7asd5asd7f4f1f'})) 但是,它会给出错误? TypeError: Cannot read property 'connect.sid' of undefined 如何在expressjs中创build会话? 我一直在尝试创build3天的会话。

req.session.passport为空:req.user未定义

我之前曾经问过类似的问题,但我注意到它是在Javascript部分。 对于现在可能会出现什么问题,我也有更具体的想法。 基本上,我的日志中req.session.passport是空的。 每当我开始浏览我的网站,req.user变得未定义,因为会话没有Passport的login用户了。 我想知道有没有人知道如何解决这个问题? 也许这只是Passport的configuration错误,或整个Express设置? App.js: var express = require("express"), bodyParser = require("body-parser"), mongodb = require("mongodb"), mongoose = require("mongoose"), uriUtil = require("mongodb-uri"), morgan = require("morgan"), session = require("express-session"), passport = require("passport"), flash = require("connect-flash"), ip = "hidden", port = process.env.PORT || 80 var app = express() app.disable("x-powered-by") app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: true })) app.use(morgan("dev")); // […]

使用encryption的cookie和会话存储来保护请求

我最近注意到,我正在咨询的应用程序正在使用未encryption的cookie。 前端(Angular)定期使用以下内容来提取用户标识: var user_id = JSON.parse($cookies.userdata).id; 我想象一个不愉快的访问者可以不断地使用他们的浏览器来改变他们的ID和访问他们不应该的资源。 这是一个巨大的红旗,我可以用一些帮助支持这一点。 这看起来像一个足够坚实的指导 ,但我并没有把自己的想法围绕在不同的部分。 如果我使用Mozilla的客户端会话,那么cookie中存储了什么? 任何我想要的? 我有诸如GET /api/v1/user/:user_id API路由来返回关于用户的信息。 如果Cookie在浏览器中被encryption,我将失去访问当前user_id并进行此API调用的能力。 我的行动计划是什么? 为这个API创build一个代理服务器端,首先解密cookie,提取user_id , 然后调用GET /api/v1/user/:user_id ? API路由被一个函数保护, req.isAuthenticated() === true ,如果有帮助的话。 鉴于以上情况,会议在什么时候开始? 假设我在MongoDB中存储用户会话。 我们知道cookies只能存储4kb,但如果这样就足够了? 应该在cookie中存储什么types的数据以及应该在用户会话中存储哪种数据? 你的回答将会是一个很长的路要走,清理一些对我来说有点黑盒子的概念。

将快速会话传递给socket.io

https://github.com/xpepermint/socket.io-express-session这是我尝试过的很多方法之一。 我也尝试了所有这些答案: 如何与Socket.IO 1.x和Express 4.x共享会话? 还有更多…这一切都给了我exaclty同样的结果: 抛出新的TypeError(“参数”url“必须是一个string,而不是”+ typeof url)^ TypeError:参数'url'必须是一个string,而不是undefined 我已经尝试了我在互联网上find的每一个解决scheme,基本上所有的东西都导致了我的错误。 在某些时候,我只是尝试复制和粘贴find的例子,他们给我完全一样的结果。 我猜中间件更新后会出错。 如何解决它? 有没有另一种可靠的方式与socket.io共享快速会话? var Session = require('express-session'); var session = Session({ secret: 'pass', resave: true, saveUninitialized: true }); var cookieParser = require('cookie-parser'); var express = require('express'); var app = express(); app.use(cookieParser()); app.use(session); // session support app.get('/', function (req, res) { req.session.uid = 1; […]

socket.io通过多个服务器没有redis

我的API端点分布在多个服务器上的多个位置,我想弄清楚如何处理连接客户端上的套接字更新。 我真的想避免有一个单一的Redis数据库设置只是为了处理连接的客户端,通过许多服务器。 我不会必须广播消息,套接字消息将始终发送给单个用户。 虽然我知道每个连接的客户端渠道ID我不知道是否有可能向一个用户发送一条消息,当我手中只有渠道ID,例如最初的连接是与其中一个集群中的另一台服务器。 我看到有一个粘性负载平衡的选项,但我不完全确定这是我真正需要的。 感谢大家可以给我一个更深入的解释什么是最好的办法做到这一点。

如何将会话variables从express / node传递给angular?

所以基本上我使用angular度路线,并使用快递来呈现索引页面。 我想要传递一个会话variables从expression到angular度,但我不知道如何获得每个angular度的路线中的variables。 app.js(快递): app.get('*', function (req, res) { res.sendFile(__dirname+'/client/views/index.html',{ isAuthenticated:req.isAuthenticated(), user:req.user }); }); 的index.html <body> <div class="main" ng-view> </div> </body> Angular应用程序文件: var myapp=angular.module('myApp', ['ngRoute','ngStorage']); myapp.controller('contrl1', ['$scope' ,'$localStorage','$http', function ($scope, $localStorage,$http) { }]); myapp.controller('contrl2', ['$scope' ,'$localStorage','$http', function ($scope, $localStorage,$http) { }]); myapp.config(function($routeProvider, $locationProvider) { $routeProvider .when('/try', { templateUrl: '../views/view1.html', controller: 'contrl1', }) .when('/hello', { templateUrl: '../views/view2.html', […]

socket.io会话ID和快速会话

我正在使用socket.io创build一个应用程序,我的问题是当用户在同一个浏览器中打开多个选项卡时,它将创build新的会话ID [socket.id]。 我如何在所有的选项卡中携带相同的会话ID? 我在这篇文章danielbaulig中使用了快速会话,但是这些文章如何帮助我在浏览器中的所有选项卡上携带相同的socket.io会话ID? 而上述职位已过时,你能解决这些问题吗? 谢谢..