小编chr*_*lsa的帖子

Express.js/Passport应用程序为每个请求创建新会话,尽管请求标头中有会话ID

之前没有注意到这一点,因为对于客户端 - 服务器通信,不需要通过XHR进行身份验证(截至目前).在实现一些集成测试时,我正在创建realy请求node-xmlhttprequest到应用程序的实际实例.用户在第一个请求中进行身份验证,理论上用户的唯一标识符和一些其他相关信息存储在会话中(正如我所说,这对真正的客户来说很好,他们不需要通过XHR确认他们的身份).出于某种原因,即使使用完全相同的会话ID触发后续请求,我也无法在后续请求中检索会话,因此无法看到用户已通过身份验证,这会导致测试失败预期的行为不会发生,HTTP 401 UNAUTHORIZED正在填满终端.

我已经看到了几个看起来像这样的问题,但是"相同的会话ID"似乎并不存在.

我是否需要手动将Set-Cookie标头添加到所有XHR请求中?那太可怕了,必须有更好的方法!

所以人们喜欢源代码,这里有一些来自测试,解雇这些请求:

// Ensure logged in before sending request, to verify that authorized
// users encounter the expected behaviour.
jQuery.post(domain+'/login', {email:'test@express.app', password:'12345678'},
function(data,x,y){
  data.should.equal("true")
  jQuery.ajax({url:domain+'/event', type:"POST",
    name: "TestEvent", location: "TestVille",
    startDate: new Date('2013-09-01'), startTime: '6:45 pm',
    description: "Test Event #1", success: state.success,
    error: state.error, completed: state.completed
  })
})
Run Code Online (Sandbox Code Playgroud)

登录发生,用户ID被写入会话(`req.logIn()应该这样做,并且它不报告任何失败),用户ID的序列化不报告任何失败,我非常困惑为什么后续使用相同会话ID的请求无法找到序列化的用户ID.

我一般不参与网页开发,所以对某些人来说这可能是显而易见的,但我一直在寻找一个答案而根本找不到答案.我很感激任何指针,我很乐意提供尽可能多的代码,以说明问题所在.

可能相关的一些额外代码点:

用户ID的序列化/反序列化(目前以最简单的方式实现 - 在初始化中间件之后,在初始化护照和passpot.session()之后很早.这非常适用于非XHR请求)

// Serialize user for passport session-store
// Currently only serializing 'user_id'
passport.serializeUser(function(user, done) {
  done(null, user._id)
})

// Deserialize user …
Run Code Online (Sandbox Code Playgroud)

session session-cookies node.js express passport.js

5
推荐指数
1
解决办法
811
查看次数

标签 统计

express ×1

node.js ×1

passport.js ×1

session ×1

session-cookies ×1