0

我在 SO 上找到了一些类似的主题,但没有一个对我有用。我在用户模型中有这个:

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 回答