如何在Devise自定义身份验证策略中添加自定义错误密钥?

时间:2017-08-16 02:37:42

标签: ruby-on-rails authentication devise

有必要使Devise中的授权错误以与RubyOnRails中的ActiveModel :: Errors相同的方式工作,即错误在哈希中由对应于字段名称的键提供。

我希望得到来自{ errors: { user: 'User not found' } }{errors: { password: 'Invalid password' } }的服务器的回复,但我仍然从服务器获得{ error: 'User not found' }

我的自定义策略:

module Devise
  module Strategies
    class Password < Authenticatable

      def authenticate!
        resource  = password.present? && mapping.to.find_for_database_authentication(authentication_hash)

        if resource
          if validate(resource){ resource.valid_password?(password) }
            remember_me(resource)
            resource.after_database_authentication
            success!(resource)
          else
            errors.add(:password, I18n.t('devise.failure.invalid_password'))
            fail!(:invalid_password)
          end
        else
          errors.add(:user, I18n.t('devise.failure.user_not_found'))
          fail!(:user_not_found)
        end
      end

    end
  end
end

1 个答案:

答案 0 :(得分:0)

答案是修改config / locales / devise.en.yml但你必须添加设置,默认情况下它们不在那里。