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