【问题标题】:Rails 4 Devise/Omniauth Email exists in database errorRails 4 设计/Omniauth 电子邮件存在于数据库错误中
【发布时间】:2013-06-11 16:00:07
【问题描述】:

我正用头“撞”在墙上试图弄清楚这一点。我决定允许用户通过 twitter、Google、我的网站或 Facebook 登录。问题是 twitter 不提供电子邮件,所以我试图通过用户名添加用户。问题是设计不断检查电子邮件,当我不需要它时,我得到 PG::Error: 错误:重复键值违反唯一约束“index_users_on_email”详细信息:键(电子邮件)=()已经存在。 :插入“用户”(“created_at”、“名称”、“提供者”、“uid”、“updated_at”、“用户名”)值($1、$2、$3、$4、$5、$6)返回“id”。

我不知道我应该做什么。我在我的数据库中创建了一个用户名列,并确保将其添加到我的 devise.rb 初始化器中,config.authentication_keys = [ :username ]

【问题讨论】:

    标签: ruby-on-rails devise twitter omniauth ruby-on-rails-4


    【解决方案1】:

    我认为这是因为默认的 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
    

    【讨论】:

    • 创建迁移确实删除了电子邮件列上的唯一和热空值。请参阅扩展答案。
    • @MichalSzyndel 这行得通。我在 Rails 4.2.3、Devise 3.5.1 和 Postgresql 上遇到了这个错误
    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2013-09-30
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多