0

我已经尝试过广泛地寻找解决方案。该应用程序在作为 localhost 运行时可以正常工作,从而使用户在较长时间内保持身份验证。但是当我在我的服务器上运行它并登录时,就像连接在短时间内重置一样,我被迫再次登录。

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

  • ExpressJS 版本。3.0.0rc4
  • PassportJS 版本。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。本地主机和服务器的 cookie 未正确设置。问题可能与本次讨论有关

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

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

4

1 回答 1

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
)
于 2013-03-31T17:03:26.120 回答