2014-04-30 79 views
1

我設置了Devise和Omniauth,供用戶通過電子郵件,推特和臉書登錄。我不想讓用戶在應用內發送消息。來自Rails應用程序的Tweeting

我目前正在使用下面的代碼,但它只是從我的Twitter帳戶發佈。我假設這與不正確設置Oauth_token有關。無論登錄到應用程序的帳戶是什麼,它仍然來自我的帳戶。

在我的用戶模型中,我有以下代碼(我已經改變了我的鑰匙和令牌)...

def self.find_for_twitter_oauth(auth, signed_in_resource=nil) 
     user = User.where(:provider => auth.provider, :uid => auth.uid).first 
     if user 
     return user 
     else 
     registered_user = User.where(:email => auth.uid + "@twitter.com").first 
     if registered_user 
      return registered_user 
     else 

      user = User.create(full_name:auth.extra.raw_info.name, 
           provider:auth.provider, 
           uid:auth.uid, 
           email:auth.uid+"@twitter.com", 
           oauth_token:auth.credentials.token, 
           oauth_secret:auth.credentials.secret, 
           password:Devise.friendly_token[0,20], 
          ) 
     end 

     end 
    end 

    def tweet(tweet) 
     client = Twitter::REST::Client.new do |config| 
     config.consumer_key  = "XXXXXXXX" 
     config.consumer_secret  = "XXXXXXX" 
     config.access_token  = "XXXXXXX-XXXXX" 
     config.access_token_secret = "XXXXXXX" 
     end 

     client.update(tweet) 
    end 

在我的配置/初始化/ devise.rb我有以下幾點:

# Add Twitter OmniAuth 
    require 'omniauth-twitter' 
    config.omniauth :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET'] 
    # Add Facebook OmniAuth 
    require 'omniauth-facebook' 
    config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'], :scope => 'basic_info, email, publish_stream' 

在我看來,我正在使用一個表格填寫並提交推文。

<p> 
    <%= form_for :tweet, url: tweets_path, method: :post do |f| %> 
    <%= f.text_field :message %> 
    <%= f.submit "Send Tweet" %> 
    <% end %> 
</p> 

回答

0

您應該授權每個Twitter用戶與您的應用程序(我記得只有消費者密鑰和消費者密鑰)。

我這樣做是用簡單的方法:

consumer = OAuth::Consumer.new($TWITTER_CONSUMER_KEY, $TWITTER_CONSUMER_SECRET, :site => "https://api.twitter.com") 
request_token = consumer.get_request_token(:oauth_callback => "http://localhost/twitter/auth_callback") 
return request_token.authorize_url 

通過URL我

access_token = request_token.get_access_token(:oauth_verifier => params[:oauth_verifier]) 
token = access_token.token 
secret = access_token.secret 

現在如果你到您的REST客戶端,您可以從您的用戶帳戶發佈的tweets設置這些toekn和祕密。

相關問題