如何将Devise Confirmable添加到现有的Rails应用程序中

时间:2013-10-21 21:34:58

标签: ruby-on-rails ruby devise

我正在使用现有的Rails应用程序(30多个型号,30多个控制器)并尝试实现Devise的确认(现在用户在注册时不会被提示创建密码)。

我的问题是,两个(看似)小动作导致300个规格开始失败......我希望有更多有经验的人提供任何建议,以帮助我避免在任何兔子洞中走得太远。

这两个行动:

(1)在user.rb中我将:confirmable添加到设计配置中:

devise :database_authenticatable, :recoverable, :rememberable, :confirmable, ...

(2)在devise.rb中我取消注释allow_unconfirmed_access配置:

config.allow_unconfirmed_access_for = 2.days

这两个动作导致几乎1/4的我的规格开始失败。在我开始深入研究每个规范并进行更改之前,有人可以让我知道我错过了什么或指出了我正确的方向吗?

更新我已将原因缩小到我认为是管理员权限问题。针对普通用户的规范正在通过,但是任何需要管理员登录的测试现在都失败了(例如,预期响应为200而不是返回302或401的规范......)

在我的普通用户工厂中,我将confirmed_at包括在方程式Time.now中。这就是我构建管理员的方式:

  factory :admin_user, :parent => :user do
    email ADMIN_USER_EMAIL
  end

ADMIN_USER_EMAIL是引用实际管理员电子邮件地址的ENV变量。由于它继承自:parent => :user我不知道还有什么可以尝试确认管理员?

1 个答案:

答案 0 :(得分:0)

好吧,无论如何,这是一个蹩脚的问题,但我找到了导致319规格破坏的底线。

Devise的一个特点:可确认的是,不仅需要确认帐户,还需要确认帐户的任何更改。

更新/分配用户工厂存根的规范(更新是user.email=还是gift_payment.user.xyz=等)导致undefined method for nil class

所以我进入了我的factories.rbspec_utilities.rb以及所有单独的规范,以确保调用user.confirm!

更改工厂和实用程序方法会将319错误降低到大约30,从那里我不得不进入每个规范并在各个地方撒上confirm!

仍然不确定我的方法是否偏离基础,但是我的规格已经下降到0 ...(暂时)。