Tag: 快递

Node.js Express – 在不同的服务器上共享Passport会话

所以我们有一个“web”服务器和一个API服务器 – web服务器提供HTML,API服务器提供JSON。 我们使用Passport的Twitter策略在Web服务器上进行身份validation。 我的问题是 – 检查API服务器的最佳方法是什么,用Web服务器进行身份validation的用户也使用API​​进行身份validation? 我的假设是,我们应该把大部分Passport代码放到Web服务器上,让用户像往常一样使用Passport进行身份validation,并使用API服务器中的某些中间件来检查用户是否已login(有会话): app.use(passport.initialize()); app.use(passport.session()); app.use(expressSession({ secret: 'keyboard cat', store: new MongoStore({mongooseConnection: mongoose.connection}) })); app.use(function(req,res,next){ if(req.isAuthenticated()){ next(); } else{ console.log('unauthenticated request'); res.status(403).json({error:'unauthorized request'}); } }); 但是,上述似乎还不够。 我完全搞不清楚API服务器上需要什么代码 – 我相信我需要从相同的会话存储中读取Web服务器写入的内容,并在API服务器的请求中查看令牌,并将其与会话存储中的令牌? 我不知道我明白了req.isAuthenticated()函数的作用是什么? 好像我现在需要写我自己的req.isAuthenaticated()函数,它会话存储asynchronous读取… 有没有人有一个如何做到这一点的权利?

脸书authentication与护照。 无法读取未定义错误的属性“0”

我正在学习使用Facebook将社交authentication添加到应用程序中。 一切工作正常,直到我真的尝试login到我的testing应用程序与Facebook。 而不是路由到configuration文件页面,我得到这个错误: Cannot read property '0' of undefined TypeError: Cannot read property '0' of undefined at Strategy.generateOrFindUser [as _verify] (C:\projects\Side Projects\passyapp\app.js:16:19) at C:\projects\Side Projects\passyapp\node_modules\passport- oauth2\lib\strategy.js:193:24 at C:\projects\Side Projects\passyapp\node_modules\passport- github\lib\strategy.js:174:7 at passBackControl (C:\projects\Side Projects\passyapp\node_modules\oauth\lib\oauth2.js:134:9) at IncomingMessage.<anonymous> (C:\projects\Side Projects\passyapp\node_modules\oauth\lib\oauth2.js:157:7) at emitNone (events.js:91:20) at IncomingMessage.emit (events.js:185:7) at endReadableNT (_stream_readable.js:974:12) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9) 下面是从我的APP.JS文件中的一个SNIPPET: function […]

正确的标题,但铬说:“资源解释为文档”

我读了很多像这样的问题,但我真的无法弄清楚… 我使用存档器和expression Node.js模块。 我想简单地发送一个zip文件到客户端。 我的代码大致如下所示: res.set("Content-Type", "application/zip"); archive = archiver("zip", {store: true}); archive.pipe(res); 当请求时,zip文件被正确传输,但Chrome抱怨: 资源解释为文档,但使用MIMEtypes的应用程序/ zip传输 如果我把内容types设置为text/json ,我会做一些愚蠢的事情: 资源解释为Document,但是以MIMEtypestext / json传输 所以显然,我在Node.js中设置的是做它的工作,而其他的是这个问题。 它说资源是通过MIMEtypesapplication / zip传输的 ,但是解释为Document。 我如何使它不被解释为文档? 另外,我尝试了这些设置内容types的方法: res.type("application/zip"); res.contentType("application/zip"); 但是我得到了同样的结果。 另一方面,Mozilla不会抱怨任何事情。 类似的问题的一些答案说,这个警告可以被忽略。 我应该忽略它吗? 难道问题是存档是直接pipe道到响应对象? 尽pipe(我重复一遍),邮件发送成功 。 编辑: 设置Content-Disposition也不起作用: res.set({ "Content-Type": "application/zip", "Content-Disposition": "attachment; filename='images.zip'" }); 我也使用<iframe>来发起请求: document.getElementById("iframe-downloader").src = requestUrl; 原因是因为我不想要页面redirect。 我能做到的唯一方法就是这样。 编辑: 改变我的Chrome设置如何这个答案指出不工作。 编辑: […]

会话在两个本地Node.js服务器上

我有两个本地的Node.js服务器: HTTP://本地主机:3000 HTTP://本地主机:3001 我使用express.js和passport.js进行身份validation。 validation工作正确,但是如果: 我在服务器1上login 我在服务器2上login 那么服务器1上的会话消失。 如何防止这种情况? app.use(bodyParser()); app.use(cookieParser()); app.use(session({ secret: '12345', resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy( function(username, password, done) { users.getActiveByUsername(username, function(err, user) { if (err) {console.log(err); return done(err); } if (!user) { return done(null, false, { message: 'Incorrect username' }); } if (user.password != password) { return […]

nodemailer nodejs:sendmail退出127

我想从我的服务器(kimsufi)发送电子邮件,以确认注册。 所以,我使用nodemailer https://github.com/andris9/Nodemailer 我有这个错误: Error occured Sendmail exited with 127 什么意思 ? 谢谢 !

使用node.js客户端会话没有明确的

我试图让客户端会话工作,而不使用快递,但我不知道如果我正确地移植示例。 var sessionOptions = { cookieName: 'mySession', secret: 'blargadeeblargblarg', duration: 24 * 60 * 60 * 1000, activeDuration: 1000 * 60 * 5 }; var session = new SESSION(request, response, {}, sessionOptions); 当我运行这个客户端会话抱怨 不能build立没有秘密或encryptionKey / signatureKey对的会话 客户会议是否需要快递工作?

在集群模式下运行pm2redirect后,req.session数据丢失

我们运行一个node.js应用程序,并使用express 4.6.1 cookie分析器1.3.2 connect-flash 0.1.1和express session 1.7.0。 我们使用Flash在redirect后在页面上显示消息,有时在req.session中存储数据,以便在用户犯错并需要重新input时自动填写表单。 最近,我们开始在集群模式下使用pm2,大多数情况似乎都能正常工作,但是我们注意到,在redirect之后,我们丢失了存储在req.session中的闪存数据和数据。 这里是一个例子: req.flash("signup", errorString); req.session.storedData = {}; req.session.storedData.username = ""; req.session.storedData.password = req.body.password; req.session.storedData.email = req.body.email; req.session.storedData.emailConfirm = req.body.emailConfirm; res.redirect(problemRedirectPath); 这来自在用户尝试注册后接受请求但是有某种错误的端点。 如果我们在没有集群模式的情况下运行它,会话数据和闪存都会正常显示,但是如果我们在集群模式下运行它们,它们几乎总是丢失(不总是:/) 有没有更好的方式在集群模式下做到这一点?

在使用作业队列(kue / node / express)时将响应发送回请求者

js / express。 我正在做的是发送一个请求来表示服务器从一个不同的服务器与一些用户的详细信息。 将请求详细信息添加到作业队列(kue),然后使用工作人员(集群)处理作业并向用户发送电子邮件。 我想发送一个响应回发送请求到我的快递服务器的服务器。 正常的res.send()在这里不起作用,因为在将请求参数添加到队列和进程之后,请求和响应之间没有链接。 这里是我的代码的示例。 app.js app.get('/my_request/:param1/:param2/:param3', function( req, res ) { req.params.type = "ORDER_COMPLETE"; var params = req.params; jobs.create('jobQueue', { 'title': "order_receipt", 'params' : params } ) .ttl( 30 * 1000 ) //value in ms // 30 min .removeOnComplete( true ) .save(function(err) { if (err) { console.log('jobs.create.err', err); } }); //res.send( […]

NodeJS:callback不是一个函数 – 电子邮件validation

我试图实现一个用户注册系统,在Android与节点作为我的后端服务器。 我在本地主机上使用Node 4.4.5,并使用“email-verification”包 – https://www.npmjs.com/package/email-verification 所以根据android的请求,发送一个validation链接的确认电子邮件,这是正常工作。 点击链接时,会发出GET请求,确认用户,将其添加到MongoDB数据库,并发送JSON响应。 电子邮件被发送给用户确认该帐户。 发送确认邮件后,服务器崩溃。 这是我的代码 – router.get('/email-verification/:URL', function(req, res, next){ var url = req.params.URL; console.log('email-verify-start'); nev.confirmTempUser(url, function(err, user) { console.log('error is :' + err); if (user) { nev.sendConfirmationEmail(user.email, function(err, info) { if (err) { console.log('sending_conf_email_failed'); return res.json({'email': 'sending_conf_email_failed'}); } console.log('user_confirmed'); res.json({ 'email': 'user_confirmed' }); console.log('Done, and confirmed'); }); } else […]

app.post的第一个string参数是做什么的?

我看到了一个app.post()函数的例子。 “/”是什么意思? 我们是否需要使用post和get方法,或者我们可以只使用一种方法? app.post('/', function(req, res){ return; });