5

我正在使用带有安全扩展的设计来验证强密码。

当我尝试使用已接收的电子邮件注册帐户时,我在错误哈希中两次收到错误“电子邮件已被接收”。

我的用户模型如下所示:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  # :trackable deleted
  devise :database_authenticatable, :registerable, :secure_validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :firstname, :lastname, :password, :password_confirmation, :remember_me
end

如果没有安全扩展(:validatable而不是:secure_validatable),我只会收到一次错误。

我究竟做错了什么?


PS奖金问题:

我如何首先防止出现某些错误?我是否必须操纵设计的 RegistrationsController 或者是否有此选项?

4

3 回答 3

5

有同样的问题。

检查这是否有帮助:https ://groups.google.com/forum/?fromgroups=#!topic/plataformatec-devise/S0nxv7BK10M

于 2013-03-12T23:32:58.713 回答
1

发生这种情况的真正原因是 devise_security_extension 两次定义了电子邮件唯一性验证器。

第一次是为默认登录字段定义唯一性验证器。第二次是为电子邮件字段定义唯一性验证器。

当您的默认登录字段是电子邮件时(这很常见),验证器会被定义两次。

我通过将以下代码放入初始化程序文件来解决此问题。当电子邮件是您的登录属性时,它可以防止创建不必要的验证器。

module Devise
  module Models
    module SecureValidatable
      module ClassMethods
        private

        def has_uniqueness_validation_of_login?
          return true if login_attribute == :email
          super
        end
      end
    end
  end
end
于 2016-05-17T12:19:57.807 回答
0

您可能还激活了 :validatable 模块。如果您在设计设置中提到它, :secure_validatable 会跳过那些基本检查(电子邮件:存在、唯一性和密码:存在)并且它只显示一次错误。

设计:database_authenticable,:registerable,:secure_validatable,:validatable

于 2016-01-10T07:47:42.677 回答