Tag: express

节点js,JWT令牌和逻辑背后

我正在使用JWT来保护节点js https://github.com/auth0/express-jwt 要创build一个JWT令牌用户会话,我只需要: -> auth/signup -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/}); 或者在login电话的情况下 -> auth/login -> jwt.sign(user_profile,secret,expireInMinutes:{900000000 /*almost never expires*/}); 每次调用受保护的url时,我都会检查由JWT中间件自动设置的req.user 。 现在我想知道: 1 – 调用sign()时,JWT标记存储在哪里? 2 – 我必须validation()令牌每次被保护的url被称为? 如果是,为什么? 3 – 当我为已经签名的用户设置一个新的令牌时,旧的令牌(如果存在)被删除? 如果到期没有设立,或者是5年如果呢? 4 – 为什么我不能在同一个浏览器/应用程序页面上设置新的令牌? 我得到无效的签名错误,如果我注册一个新的令牌,但令牌匹配(我检查)这就像我不能在同一浏览器上签署超过1个用户

在express.js中,req.files是未定义的

我尝试上传一个PNG到我的node.js服务器,但每次调用req.files.avatar ,都会出现一个错误,并说TypeError: Cannot read property 'avatar' of undefined 。

Heroku上的Node.js Web Socket H15空闲连接超时

我们在Heroku上运行Node.js和Express应用程序,使用ws库实现实时web套接字。 下面是我们看到的众多H15超时的屏幕截图。 我读过Heroku在55秒后终止任何空闲连接,但是当连接打开时,我们的套接字每5秒钟来回发送一次乒乓。 下面是一段服务器代码: var _this = this; this.server.on('connection', function(ws){ // check for a ping, respond with pong ws.on('message', function(data){ data = data.toString('utf8'); if (data === PING) { ws.send(PONG); } }); ws.on('close', function(err){ TL.logger.info('Socket closed: '+path); _this.sockets = _.filter(_this.sockets, function(_ws){ return ws != _ws; }); }); ws.on('error', function(err){ TL.logger.info('Socket error: '+path); _this.sockets = _.filter(_this.sockets, function(_ws){ […]

AngularJS不拦截地址栏的直接请求

我正在创build一个使用JWT令牌进行authentication的AngularJS应用程序。 令牌正在使用AngularJS拦截器传递,如下所示。 'request': function(config) { if (store.get('jwt_token') != null) { config.headers['x-access-token'] = store.get('jwt_token'); } else { config.headers['x-access-token'] = ''; } return config; } 每当我访问任何/restricted页面,一切工作正常。 问题是,当我通过直接在地址栏中inputURL(或刷新页面)来访问/restricted页面时,AngularJS会被绕过,因此拦截器不会拦截请求,而令牌是不及格。 我一直在寻找一些,我发现了一些解决scheme,比如用一段加载AngularJS的代码进行响应,然后从那里进行redirect。 不过, 如果可能的话 , 我正在寻找一个更简单/整洁的方法,因为我可能在这里错过了一些东西 。 我可以通过检查x-access-token来检测请求是否来自AngularJS,因为我总是通过它(如果用户未经过身份validation,则为空值)。 解 亚历克斯的回答是指出确切的问题,谢谢亚历克斯。 我终于明白了昨天。 我去的解决scheme是确保所有的请求来自AngularJS,我有一个限制页面的列表,如果任何请求,我打电话一个函数来validation和validation服务器端的JWT令牌,如果它是有效的,继续,否则,进入login页面。 关键是确保所有请求都应该到index.html以确保AngularJS正在处理路由。 这个链接帮助我解决了这个问题。 http://arthur.gonigberg.com/2013/06/29/angularjs-role-based-auth/

parsing云代码“第一个”查询数组返回不同的结果

我有一个简单的查询如下: var getGreaterQuestion = function (gid) { var query = new Parse.Query(Parse.Object.extend("Question")); query.equalTo("groupId", gid); return query.first(); } 我正在准备一个由这个函数组成的数组: var groupIds = _.range(1, 17); var groupIdAndRandomNumberPack = _.map(groupIds, function (gid) { return {groupId: gid, random: Math.random()}; }); var pack = _.map(groupIdAndRandomNumberPack, function (queryItem) { return getGreaterQuestion(queryItem.groupId, queryItem.random); }); 在pack数组中, Question类有16个不同的“第一”查询。 我正在使用下面的代码片段运行此查询: return Parse.Promise.when(pack).then(function () { console.log("arguments […]

护照authentication失败导致redirect循环

我正在使用节点,快递和护照与Facebook身份validation。 我有以下路线(当/facebook/auth/callback是callbackurl): function render(page, req, res) { var user = null; if (req.user) { user = req.user.toObject(); user.isLoggedIn = true; } res.render(page, { user: user }); } app.get('/auth-failure', function (req, res) { res.render('auth-failure'); }); app.get('/auth-success', function (req, res) { render('auth-success', req, res); }); app.get('/facebook/auth', passport.authenticate('facebook', { scope: [ 'email', 'user_about_me', 'publish_actions']})); app.get('/facebook/auth/callback', passport.authenticate('facebook', { failureRedirect: […]

使用jQuery AJAX与node.js,处理来自服务器的响应

这是我第一次在这里发表一个问题,我大多只是一个潜伏在其他问题上的潜伏者,但是这是我一直想弄明白的事情,而且我的生活不能。 基本上我正在做的是使用AJAX从客户端跳转到服务器,运行一些代码,search外部API给我一些数据,然后我需要这些数据返回到客户端。 这是我的代码…这是所有使用express.js的快递 客户端 $('#search').click(function(){ $.ajax({ type: "GET", url: "/search", dataType: "json" }).done (function (data) { alert(data); }); }); 服务器端 app.get('/search', function(req, res){ factual.get('/t/places',{q:'starbucks'}, function (error, data) { console.log(data); res.send(data); }); }); 现在我知道,单击#searchbutton时,它会转到服务器并成功运行该代码。 但是我不知道如何从服务器上获取这些数据,然后返回到客户端来在那里工作。 我发现其他职位提到像res.send / res.write / res.end,我已经尝试了所有这些forms的知识,我似乎永远不会将这些数据返回给客户端。 任何提示或可能更好的方法来做到这一点将非常感激。

套接字IO只会话不会持久

我正在使用我正在构build的聊天应用程序中的Socket.io 。 我正在尝试设置会话,以便在会话之间持续login用户。 以下是相关的代码: index.js (服务器) var cookieParser = require('cookie-parser')(); var session = require('cookie-session')({ secret: 'secret' }); app.use(cookieParser); app.use(session); io.use(function(socket, next) { var req = socket.handshake; var res = {}; cookieParser(req, res, function(err) { if (err) return next(err); session(req, res, next); }); }); io.on('connection', function(socket){ socket.on('test 1', function(){ socket.handshake.test = 'banana'; }); socket.on('test 2', function(){ […]

Heroku(Cedar)+ Node + Express + Jade子目录中的客户端JavaScript文件在工作时使用foreman + curl,但是当推送到Heroku时

我对节点和heroku很新,我怀疑这是一种简单的许可问题等,但我似乎无法跟踪它。 我在我的web.js文件所在的根目录下的一个子目录中有几个纯JavaScript文件。 我在我的web.js文件中有一行来指定目录 app.use('/heatcanvas',express.static(__dirname+'/heatcanvas')); 如果我使用Heroku Foreman在本地运行我的应用程序,那么在运行以下curl命令时,会得到预期的js响应 curl localhost:5000/heatcanvas/heatcanvas.js 但是,当我推到Heroku,并在浏览器中击中相应的实时url www.example.com/heatcanvas/heatcanvas.js 我收到以下内容: Cannot GET /heatcanvas/heatcanvas.js 如果我检查Firebug和/或Heroku日志,我发现我实际上得到这些文件的404错误,即使path应该匹配在本地完成。 另外值得一提的是,第三方javascript正好过来,只有脚本标记的src属性指向我的网站时才有问题。 我需要做什么才能使我的脚本可用?

如何设置RedisStore – Node,Express,Socket.io,Heroku

我正在使用部署在Heroku上的Node&Express 4.0,并且试图将Redis的Socket.io作为一个会话存储来实现。 所以我有这个作为我现在的代码: var app = express(); var server = require('http').createServer(app); var io = require('socket.io').listen(server); var RedisStore = io.RedisStore; if (process.env.REDISTOGO_URL) { // inside if statement 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(); } /** Initialize RedisStore for socket.io **/ io.set('store', new RedisStore({ redis : […]