代码之家  ›  专栏  ›  技术社区  ›  thunki

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

  •  0
  • thunki  · 技术社区  · 11 年前

    我试着到处寻找解决这个问题的办法。当作为localhost运行时,该应用程序可以正常工作,使用户在很长一段时间内保持身份验证。但当我在服务器上运行它并登录时,就好像连接在短时间后被重置,我被迫再次登录。

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

    • ExpressJS版本3.0.0rc4
    • 护照JS版本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的建议更新了代码,并重新访问了我的页面。这一次,我比较了作为localhost运行应用程序时的会话cookie与在服务器上的会话cookie。本地主机和服务器的cookie设置不正确。这个问题 might be related to this discussion .

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

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   robertklep    11 年前

    这看起来不对:

    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)
    )
    

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

    使用 最大年龄 相反,它设置相对于创建会话的时刻的到期时间:

    app.use express.session(
      secret : ...
      cookie :
        maxAge : 3600000
    )