正在升级一个旧的Rails 2.3应用程序以使用Rails 4。到目前为止,一切都运行得很好,除了升级到最新的稳定版本后,我不再能够登录到现有的用户帐户。除了不正确的电子邮件或密码外,没有任何错误。我也可以创建新帐户并登录它们,但是现有的帐户无法访问,如果可能的话,我希望不必为用户重置数百个密码。
我知道在Rails 2.3之后使用的版本中,Clearance开始使用BCrypt而不是SHA1,所以我在/config/initializers/clearance.rb
中设置了config.password_strategy = Clearance::PasswordStrategies::SHA1
,以便让它使用与创建帐户相同的加密。但这并没有解决问题。
有什么建议吗?我觉得在旧应用程序的某个地方设置了某种其他类型的"秘密"密钥,我需要将其带到新应用程序中,以便登录解密工作,但我对这种事情还不太了解。
谢谢!
所以我已经得到了它的工作,虽然我不太明白具体如何解决这个问题,我想分享,以防这有助于别人。
在/config/initializers/clearance.rb
中,我从config.password_strategy = Clearance::PasswordStrategies::SHA1
切换到config.password_strategy = Clearance::PasswordStrategies::BCryptMigrationFromSHA1
。
我使用Clearance::Token.new
从Rails控制台生成一个新的remember_token
,然后我手动更新数据库,以便我需要的帐户有这个remember_token
。
这两件事的结合使我能够访问以前不能访问的旧的现有用户帐户。我计划编写一个快速脚本,将用生成的remember_token
回填所有其他现有帐户。在cleargithub上有很多关于回填这些用户的memorber_tokens的讨论,但是当我安装新的clearclear时,运行初始化脚本没有这样做。
如果有人想对此进行扩展并解释它的工作原理,请这样做。