2011-11-12 2 views
1

Je rencontre des difficultés pour utiliser omniauth & twitter gem pour générer des tweets.Rails Twitter Gem Omniauth

J'utilise ce tutoriel http://blog.assimov.net/post/2358661274/twitter-integration-with-omniauth-and-devise-on-rails-3

et je peux connecter en utilisant Twitter, générer authentifications, mais je ne peux pas mettre à jour les tweets.

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

Cette ligne se plaint de la mise à jour de la méthode. Ce qui me dérange dans le tutoriel ci-dessus, c'est qu'au début, ils génèrent une migration pour stocker le secret dans les authentifications, mais à aucun moment, le tutoriel ne mentionne de changer de code pour écrire le secret dans la base de données. Je comprends que le secret est obtenu à partir du hachage omniauth qui est stocké dans le cookie de session. Qu'est-ce que j'oublie ici?

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

Donc, tout semble fonctionner indépendamment de la création du client Twitter, donc la méthode de mise à jour n'est pas disponible?

current_user.twitter.update("first tweet") 

La méthode twitter ici devrait créer le client 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 

fin

Je suis désolé, je ne suis pas très à expliquer le problème. Toute aide grandement appréciée. Merci L

+0

Utilisez-vous la gemme Twitter pour autre chose? – mnelson

Répondre

2

Si vous avez seulement besoin de publier sur Twitter, il peut être plus facile de renoncer complètement à la gemme Twitter. La génération de jeton consommateur/accès nécessite l'identifiant et le secret de l'application ainsi que les jetons d'accès et secrets de l'utilisateur. J'ai trouvé cela assez facile à mettre en œuvre que je pensais que les frais généraux de la gemme de Twitter n'était pas nécessaire.

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

c'est génial mais je me demande si vous pouvez clarifier un peu pour un noob. 1) Je suppose que j'ai besoin d'installer la gemme Omniauth? 2) "Conf" est-il court pour la config? Est-ce quelque chose que je crée? donc je dois mettre le consumer_key et le consumer_secret dans un fichier de configuration? laquelle? – Leahcim

+0

Je suis désolé pour le manque de réponse - j'ai voyagé beaucoup ces derniers temps. Conf est ma classe Settingslogic, que je vous recommande de consulter si vous ne la connaissez pas. Vous avez seulement besoin d'Oauth, mais puisque Oauth est une dépendance d'Omniauth, vous seriez prêt. – mnelson