新手问题 在 Rails 3.2.17 的项目中,如何将 Devise 从 2.2.4 升级到 3.2.3?

diguage · 2014年03月02日 · 最后由 small_fish__ 回复于 2014年03月03日 · 2077 次阅读

前两天在坛子里发帖Devise2 与 Devise3 有啥区别?。今天又看了看,感觉是自己没有表达清楚。现在,重新组织一下语言,重提一下问题。

目前在玩 Rabel,将 Devise 从2.2.4升级到3.2.3后, 登录正常工作,但是注册却提示“用户名、邮箱、密码不能为空字符串”。但是,这几个字段肯定填写啊,日志如下:

Started POST "/users" for 10.0.2.2 at 2014-03-02 09:19:52 +0000
Processing by RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"6hMutE4ecDITHkS/hHANxDS4/F25w8s94bjetyUVOcI=", "user"=>{"nickname"=>"tttt", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"注册"}
   (1.1ms)  BEGIN
  User Exists (0.5ms)  SELECT 1 AS one FROM `users` WHERE `users`.`nickname` IS NULL LIMIT 1
   (0.3ms)  ROLLBACK
  Rendered devise/registrations/_form.html.haml (5.8ms)
  Rendered devise/registrations/new.html.haml within layouts/app (8.9ms)
  Rendered shared/_alert.html.haml (0.3ms)
  Rendered shared/_sidebar_box.html.haml (1.8ms)
   (0.4ms)  SELECT COUNT(*) FROM `advertisements` WHERE (start_date <= '2014-03-02' AND expire_date >= '2014-03-02')

请问:在Rails 3.2.17的项目中,如何将Devise2.2.4升级到3.2.3?

附录:运行环境

  • Rails 3.2.17
  • Devise 2.2.4 -> 3.2.3
  • simple_form 2.0.4

更多 Gem 相关信息,请看原来的帖子:Devise2 与 Devise3 有啥区别?。另外,我还试了一下, 仅仅将 Devise 从 2.2.4 升级到 3.2.3 就会引起这个问题

莫非大家都不用 Devise 吗?怎么没人回复?自己顶一下!

这个问题,是因为 Devise 3 开始,密码加密方式改变了,移除了 salt 部分,独立到另一个 gem 里面了。我们当时搞过,只有这么个印象了。 两种解决方案:

  1. 把另一个 gem 也加入 Gemfile,然后继续用 salt 配合的方式加密。
  2. 重置所有用户的密码(哈哈,这是个蛋疼的方案),用 Devise 3 默认的加密。

#1 楼 @diguage 我一直锁定了版本,只敢升级到 'devise', '~> 3.0.3',因为我在以前的写法上做了大量的 override.. 还没来得及升级到最新的,因为 3.0.3 过后,差别比较大。。。

#2 楼 @kgen 登录没有问题。 应该不是加密方式的问题。

注册有问题,总是报** “用户名、邮箱、密码不能为空字符串”。**。这个问题还需要再研究研究!

#3 楼 @small_fish__ 我也用3.0.3试试。

#4 楼 @diguage 我怎么感觉这个是新版本对于 rails4 strong parmas 才一般出现这个 问题把

需要 登录 后方可回复, 如果你还没有账号请 注册新账号