Rails 4 Devise / Omniauth电子邮件存在于数据库错误中

我正在“撞击”我的头撞墙,试图解决这个问题。 我决定允许用户通过Twitter,Google,我的网站或Facebook登录。 问题是twitter不提供电子邮件,所以我试图通过用户名添加用户。 问题是设计不断检查电子邮件,当我不需要它时,我得到PG ::错误:错误:重复键值违反唯一约束“index_users_on_email”DETAIL:Key(email)=()已经存在。 :INSERT INTO“users”(“created_at”,“name”,“provider”,“uid”,“updated_at”,“username”)VALUES($ 1,$ 2,$ 3,$ 4,$ 5,$ 6)返回“id”。

我不知道该怎么做。 我在我的数据库中创建了一个用户名列,我确保将它添加到我的devise.rb intializer中, config.authentication_keys = [ :username ]

我认为这是因为默认的Devise安装在电子邮件库存上创建了唯一的密钥。 在你的情况下,它是空的,因此第二个用户没有唯一的(因为第一个用户占用了空字符串)。

在我的情况下迁移

 class AllowNullEmail < ActiveRecord::Migration def up remove_index :users, :email change_column :users, :email, :string, :null => true end def down change_column :users, :email, :string, :null => false add_index :users, :email, unique: true end end