Express.js + Passport.js + no-ip.org问题:动态ip服务器用户身份验证不断重置

时间:2013-03-31 15:23:52

标签: node.js express session-cookies session-timeout passport.js

我尝试过广泛搜索解决方案。当作为localhost运行时,该应用程序可以正常运行,从而使用户长时间通过身份验证。但是当我在我的服务器上运行并登录时,就好像连接在一段时间后重置,我被迫再次登录。

我的应用(有更多的依赖关系,但我猜这些是最相关的):

  • ExpressJS ver。 3.0.0rc4
  • PassportJS ver。 0.1.15

我的服务器:

  • 使用forever.js
  • 运行应用程序
  • 必须使用VPN重新连接到网络。
  • 为了提供稳定的入口点,我使用noip.com通过计算机上安装的客户端确保我的免费域始终指向我服务器的IP。

这个问题很可能与no-ip.org和动态ip有关。有任何想法吗?

还粘贴应用配置代码:

app.configure ->
  app.set "port", process.env.PORT or 8080
  app.set "views", __dirname + "/views"
  app.set "view engine", "jade"
  app.locals.compileDebug = false #Made jade a little more compact
  app.use express.favicon()
  # app.use express.logger("tiny")
  app.use express.logger("dev")
  app.use express.bodyParser()
  app.use express.methodOverride()
  app.use express.cookieParser("awesome unicorns")
  app.use express.session(
    secret: "awesome unicorns"
    cookie:
      maxAge: 2592000000
  )
  app.use flash()
  app.use passport.initialize()
  app.use passport.session()
  app.use app.router
  app.use express.static(path.join(__dirname, "public"))

更新

我按照评论者RobertKlep的建议更新了代码,并重新访问了我的页面。这次我将运行应用程序的会话cookie作为localhost与服务器进行比较。 localhost和服务器的cookie未正确设置。问题might be related to this discussion

第二次更新加最终解决方案

问题解决了!事实证明我运行的隐藏节点进程阻止了应用程序的正确更新。此外,由于服务器正在侦听端口80,因此我引发了冲突,因为我没有使用app.listen(81);

配置socket.io来侦听其他端口

1 个答案:

答案 0 :(得分:1)

这看起来不对:

app.use express.session(
  secret: "awesome unicorns"
  maxAge:
    expires: new Date(Date.now() + 3600000)
)

maxAge不是express.session的论据,我认为你的意思是cookie

app.use express.session(
  secret : ...
  cookie :
    expires : new Date(Date.now() + 3600000)
)

此外,如果像这样使用,则只会评估一次失效日期:在应用程序启动时。因此,在运行应用程序一小时后,任何新会话都将立即过期。

改为使用maxAge,它设置相对于创建会话的时刻的到期日期:

app.use express.session(
  secret : ...
  cookie :
    maxAge : 3600000
)
相关问题