Joh*_*Del 8 session ruby-on-rails session-timeout devise
我有一个rails 4应用程序,我正在使用设计进行身份验证,它工作得很好.我唯一的问题是,在我将其部署到服务器上并且用户必须再次登录后,它会丢失用户的会话.
如果我只是重新启动nginx/passenger(我用于我的应用程序),它就不会丢失它.当我部署我的应用程序时,我正在失去它.对于部署,我也会自动清除所有数据库,我的部署脚本运行种子文件,它也会生成用户.
我们目前正在开发应用程序,所以这种行为现在是可以接受的,但是将来当应用程序准备就绪时,我们不会这样做(当然!).
那么这是一个问题,因为重新播种还是我应该检查别的东西?我看到每次运行wipe out/seed操作时加密的密码都会改变,这是否与丢失用户会话有关?
您永远不应该在部署期间消灭数据库.想象一下,您的应用程序正在运行,并且您拥有数百个用户.现在,您在代码中进行了一些更改并进行部署.POOF所有数据和用户都消失了!当然这不是你想要的.
其次,当您清除数据库时用户退出可能是由于以下原因之一:
您是否为具有相同ID的用户播种?如果重新播种时用户ID发生更改,则会导致用户注销
您是否config.session_store :active_record_store使用cookie而不是使用cookie 在数据库中存储会话?在这种情况下,擦除数据库将删除会话表并注销所有用户
Rails 4默认使用加密的cookie存储.确保config.secret_token在重新部署时不会更改应用程序,以防它从数据库加载
最终,擦除数据库是用户退出登录的唯一原因,这是一种不好的做法.因此,最重要的是要在部署期间不要擦除数据.
这种行为的原因如下:
每当某个用户更改密码时,系统都会自动将其注销。
因此,基本上通过重新播种数据,重新计算密码(即使密码相同,新的加密密码与旧密码不同)。因此,该设备将自动注销用户,因为密码似乎已更改(基于不同的 crypto_password 字段)。
我通过在 seeds.rb 文件中专门设置 crypto_password 并绕过验证来设法绕过此行为。