2013-08-02 47 views
0

我在这里发现了一些类似的主题,但没有人为我工作。 我有这样的用户型号:Rails + Devise + OmniAuth:Twitter身份验证和跳过电子邮件

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"... 

我花了解决这一问题的几个小时我真的很绝望......我会感激每一个帮助。

回答

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 
+0

我想用更干净的方式来做到这一点。 – user984621

+0

将验证添加到您的模式。您可以通过迁移来更改列属性,但在我看来,这是一个更糟糕的主意。 – user2641326

相关问题