【问题标题】:Express.js + Passport.js + no-ip.org issue: dynamic ip server user authentication keeps getting resetExpress.js + Passport.js + no-ip.org 问题:动态 ip 服务器用户身份验证不断重置
【发布时间】:2013-03-21 18:58:03
【问题描述】:

我已尝试广泛搜索解决此问题的方法。当作为 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 未正确设置。问题might be related to this discussion

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

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

【问题讨论】:

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


    【解决方案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
    )
    

    【讨论】:

    • 谢谢!我会检查一下并在明天之前报告。 :)
    • 能够取得一些进展,但问题仍然存在。用更多信息更新了我的问题。
    • 会话 cookie 过期现在似乎是 1 分钟(响应时间戳是 10:00:16,cookie 过期时间戳是 10:01:16),这看起来很奇怪(它不是随机值,也不是您设置的值使用maxAge;您的应用程序中是否有一部分使用res.cookie()?我不认为您提到的任何中间件会像那样修改cookie)
    • 问题已解决,在最终解决方案中使用 cmets 更新问题。感谢您的帮助!
    猜你喜欢
    • 2012-04-27
    • 2021-07-18
    • 2020-12-15
    • 2014-07-01
    • 2019-11-08
    • 2019-11-17
    • 1970-01-01
    • 2018-03-26
    • 2017-03-31
    相关资源
    最近更新 更多