2013-08-02 46 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

相關問題