设计在部署后失去会话



我有一个rails 4应用程序,我使用设计进行身份验证,它工作完美。我唯一的问题是,在我将一个用户的会话部署到服务器上后,它会丢失会话,用户必须再次登录。

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

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

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

绝不应该在部署期间清除数据库。假设你的应用正在运行,你有数百个用户。现在对代码进行一些更改并执行部署。POOF所有的数据和用户都消失了!这当然不是你想要的。

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

  • 您是否以相同的ID播种用户?如果用户ID在重新播种时发生变化,将导致用户注销

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

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

  • 加载。

最终,清除数据库是用户注销的唯一原因,这是一个不好的做法。所以最重要的是要修复不要在部署期间擦除数据

这种行为的原因如下:

每次有用户更改密码时,设备自动将其签出。

因此,基本上通过重新播种数据,重新计算密码(即使密码相同,新加密的密码与旧密码不同)。因此,设备将自动注销用户,因为密码似乎被更改了(基于不同的encrypted_password字段)。

通过在种子中特别设置encrypted_password,我设法绕过了这种行为。

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

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

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

最新更新