2011-11-12 77 views
1

我在使用omniauth &嘰嘰喳喳的寶石產生鳴叫麻煩。Rails的Twitter的寶石Omniauth

我一直在使用本教程http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

,我可以登錄使用Twitter,產生的認證,但我不能更新微博。

current_user.twitter.update("My Rails 3 App with Omniauth, Devise and Twitter") 

該行抱怨方法更新。

什麼混淆了我關於上面的教程,在一開始他們產生遷移到存儲認證的祕密,但在本教程後面沒有一點改變任何代碼編寫的祕密數據庫的任何提及。

我的理解是,這個祕密是從存儲在會話cookie的omniauth哈希獲得。我在這裏錯過了什麼?

def hash_from_omniauth(omniauth) 
    { 
     :provider => omniauth['provider'], 
     :uid => omniauth['uid'], 
     :token => (omniauth['credentials']['token'] rescue nil), 
     :secret => (omniauth['credentials']['secret'] rescue nil) 
    } 
end 

因此,一切似乎都與創建Twitter客戶端不同,因此沒有更新方法可用?

current_user.twitter.update("first tweet") 

Twitter的方法,在這裏應該創建Twitter客戶端

def twitter 
debugger 
unless @twitter_user 
    provider = self.authentications.find_by_provider('twitter') 
    @twitter_user = Twitter::Client.new(:oauth_token => provider.token, :oauth_token_secret => provider.secret)rescue nil 
end 
@twitter_user 

對不起,我不是在解釋這個問題很大。任何幫助不勝感激。 謝謝 L

+0

您是否將twitter gem用於其他任何內容? – mnelson

回答

2

如果你只需要發佈到twitter,完全可以放棄twitter gem。消費者/訪問令牌生成需要的應用程序ID和祕密以及用戶的訪問和祕密令牌。我發現這是很容易實現,我認爲Twitter的寶石的開銷是沒有必要的。

module User::Social 

    def self.included(base) 
    base.instance_eval do 
     include Rails.application.routes.url_helpers 
    end 
    end 


    def promote_activity(type, profile) 
    url = short_profile_url(profile, :host => Conf.domain) 
    tw_client.request(:post, "http://api.twitter.com/1/statuses/update.json", :status => I18n.translate("tweets.#{type}", :profile => profile.to_s, :url => url)) 
    end 

    def tw_client 
    @tw_client ||= begin 
     consumer = OAuth::Consumer.new(Conf.tw_app_id, Conf.tw_secret, :site => 'http://api.twitter.com') 
     OAuth::AccessToken.from_hash(consumer, {:oauth_token => self.access_token, :oauth_token_secret => self.secret_token}) 
    end 
    end 
end 


class User < AR::Base 
    include User::Social 
end 
+1

這是偉大的,但我想知道,如果你可以澄清一點點的小白。 1)我假設我需要安裝Omniauth寶石? 2)配置是否爲「Conf」?這是我創造的東西嗎?所以我必須將consumer_key和consumer_secret放在配置文件中?哪一個? – Leahcim

+0

我爲缺乏答覆的遺憾 - 我近來一直走了很多。 Conf是我的Settingslogic類,如果你不熟悉它,我建議檢查一下。你只需要Oauth,但是因爲Oauth是Omniauth的依賴,所以你會設置它。 – mnelson