6

我在如何操作:允许用户使用他们的用户名或电子邮件地址登录并执行所有详细步骤,但是当我尝试通过registrations/new.html.erb表单注册时,我收到此错误:

Email can't be blank

在我的模型中,我有:

devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

attr_accessible :username, :email, :password, :password_confirmation, :remember_me

attr_accessor :login
attr_accessible :login

def self.find_first_by_auth_conditions(warden_conditions)
    conditions = warden_conditions.dup
    if login = conditions.delete(:login)
      where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
    else
      where(conditions).first
    end
  end

对这个问题有什么建议吗?

======= 更新

我在这里找到了一些东西■[rails]如何使用 Devise 和 Rails ,这里没有 EMail 是这样的:

  # Email is not required
  def email_required?
    false
  end

在我的模型中添加它后,我可以使用用户名创建记录并将电子邮件字段留空,但是当我尝试创建没有电子邮件的第二条记录时,数据库会出现错误:

Mysql2::Error: Duplicate entry '' for key 'index_parents_on_email':...

我应该使用它,从数据库中的表中删除索引,然后username在模型中验证吗?因为我真的不需要该模型上的电子邮件字段。

4

2 回答 2

12

更新

Asiniy在下面的回答实际上就像一个魅力(:

原创(谁知道?)

您的问题是 mysql 表上的索引,您可以将其从迁移中删除,但我不确定这会解决您的问题。不使用 Devise 中的电子邮件很棘手,我会建议一种解决方法,例如从 中发出假电子邮件username,类似这样

"#{user.username}@fake.me"

它不是很干净,但是当您使用omniauth 时,我看到设计为密码做类似的事情。

Rails 4 和强参数

username在 rails 4 中遇到了这个问题,我必须为以下配置允许的参数sign_up

class ApplicationController < ActionController::Base

  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

    def configure_permitted_parameters
      devise_parameter_sanitizer.for(:sign_up) do |u|
        u.permit :username, :email, :password, :password_confirmation
      end
    end
end

这在设计文档中有描述

于 2013-05-17T03:08:02.557 回答
6

正常解决方案

class User < AR::Base
  devise_for tralala

  def email_required?
    false
  end
end

请参考https://github.com/plataformatec/devise/blob/master/lib/devise/models/validatable.rb#L29

于 2014-12-31T16:23:21.077 回答