0

ここSOでいくつかの同様のトピックを見つけましたが、どれもうまくいきませんでした。私はUserモデルにこれを持っています:

def email_required?
  super && provider.blank?
end

  def self.find_for_twitter_oauth(access_token, signed_in_resource=nil)
    data = access_token.extra.raw_info

    if user = User.where(:provider => 'twitter', :uid => data.id).first
      user
    else # Create a user with a stub password. 
      user = User.new(:first_name => data.first_name,
                          :last_name => data.last_name,
                          :password => Devise.friendly_token[0,20],
                          :provider => 'twitter',
                          :uid => data.id,
                          :terms_of_use => true)
      user.save(:validation => false)
    end
    return user if user
  end

しかし、Twitterで認証しようとすると、いつも

SQLite3::ConstraintException: users.email may not be NULL: INSERT INTO "users"...

私はこの問題を解決するのに数時間を費やしましたが、本当に絶望しています...あらゆる助けに感謝します.

4

1 に答える 1

0

簡単な方法: 偽のメールを追加して、確認をスキップします。

user = User.new(:first_name => data.first_name,
                :last_name => data.last_name,
                :password => Devise.friendly_token[0,20],
                :provider => 'twitter',
                :email => auth.uid.to_s+'@twitter.com',
                :uid => data.id,
                :terms_of_use => true)
user.skip_confirmation! # only if you add devise :confirmable
user.save
于 2013-08-02T13:24:35.573 に答える