【问题标题】:Devise loses session after deploy部署后设计丢失会话
【发布时间】:2013-06-02 16:29:45
【问题描述】:

我有一个 rails 4 应用程序,我在其中使用设计进行身份验证,它运行良好。我唯一的问题是,在我将它部署到服务器后,它会丢失用户的会话,并且用户必须重新登录。

如果我只是重新启动 nginx/passenger(我正在用于我的应用程序)它不会丢失它。 当我部署我的应用程序时,我正在丢失它。对于部署,我还会自动清除所有数据库,并且我的部署脚本会运行种子文件,它还会生成用户。

我们目前正在开发应用程序,因此这种行为目前是可以接受的,但在 将来当应用程序准备好时,我们不会这样做(当然!)。

所以这是由于重新播种造成的问题,还是我应该检查其他内容?我看到每次运行擦除/种子操作时加密的密码都会更改,这是否与用户会话丢失有关?

【问题讨论】:

    标签: ruby-on-rails session devise session-timeout


    【解决方案1】:

    您不应该在部署期间清除数据库。想象一下,您的应用程序正在运行并且您有数百个用户。现在您对代码进行一些更改并进行部署。 POOF 你所有的数据和用户都不见了!这当然不是你想要的。

    其次,当您清除数据库时,用户退出登录可能是由于以下原因之一:

    • 您是否为具有相同 ID 的用户播种?如果重新播种时用户ID发生变化,会导致用户退出

    • 您是否使用 config.session_store :active_record_store 而不是使用 cookie 在数据库中存储会话?在这种情况下,清除数据库将删除会话表并注销所有用户

    • Rails 4 默认使用加密的 cookie 存储。确保在重新部署时没有更改应用程序的 config.secret_token,以防它从数据库中加载

    最终,清除数据库是您的用户退出的唯一原因,这是一种不好的做法。因此,要解决的最重要的问题是不要在部署期间擦除数据

    【讨论】:

    • 我们的应用程序正在开发中,当它投入生产时我们不会这样做,我们只会添加迁移(我在我的消息中写道)。我们正在改变/测试太多,所以在这个早期阶段是必要的。用户的 id 是在种子中专门定义的,因此每次我们重新播种数据库时用户都具有相同的 id。我们不会更改 secret_token 并且我们使用的是设计的默认值。那么为什么会这样呢?
    • @JohnDel 其他两个建议怎么样?会话表和用户 ID?
    • 我们使用 :cookie_store 作为 session_store(在初始化程序内部),并且用户在清除/重新播种之前和之后具有相同的 id。
    • 在 rails 4 上也应该检查 secret_key_base 没有改变
    【解决方案2】:

    这种行为的原因如下:

    每当一些用户更改他的密码时,设计自动将他注销。

    所以,基本上是通过重新播种数据,重新计算密码(即使密码相同,新的加密密码与旧密码不同)。因此,该设计将自动注销用户,因为似乎密码已更改(基于不同的 encrypted_pa​​ssword 字段)。

    我设法绕过了这种行为,通过在种子.rb 文件中专门设置 encrypted_pa​​ssword 并绕过验证。

    【讨论】:

      【解决方案3】:

      如果我只是重新启动 nginx/passenger(我正在使用 应用程序)它不会丢失它。当我部署我的应用程序时,我正在丢失它。 对于部署,我也会自动清除所有数据库,我的 部署脚本运行种子文件,它还生成 用户。

      如果您生成新用户,旧用户将失去他们的会话。

      这是因为新用户的价值观会有所不同。例如,它们可能没有记忆令牌集,或者如果 session_id 使用 user.created_atuser.token_generated_at 的值,则每次删除和重新创建数据库时它们都会有所不同。

      【讨论】:

      • “如果您生成新用户,旧用户将失去他们的会话”。为什么?会话不是存储在浏览器中吗?我没有将它们存储在数据库中。
      • 会话是用户特定的。如果您创建一个新用户,它将是一个不同的用户,即使电子邮件地址可能相同。
      • 所有用户行都是相同的(id、email 等)。数据库中唯一改变的是存储的加密密码(即使我使用相同的密码,设计也会将其加密为一个新字符串)。为什么?我将会话存储在 cookie 中。
      猜你喜欢
      • 2015-03-12
      • 2016-01-21
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 2018-11-25
      相关资源
      最近更新 更多