Pregunta

Me siguió el OmniAuth sencillo tutorial ( http://asciicasts.com/episodes/241-simple -omniauth ), y puedo iniciar sesión con mi cuenta de twitter en el servicio. Ahora quiero acceder a la API de twitter y tweet de la aplicación. Mi código es el siguiente:

class TwitterController < ApplicationController

def prepare_access_token(oauth_token, oauth_token_secret)
consumer = OAuth::Consumer.new("KEY", "SECRET",
    {
        :site => "http://api.twitter.com"
    })
    # now create the access token object from passed values
    token_hash =
    {
      :oauth_token => oauth_token,
      :oauth_token_secret => oauth_token_secret
    }
    access_token = OAuth::AccessToken.from_hash(consumer, token_hash)
    return access_token
end

def tweet
    # Exchange our oauth_token and oauth_token secret for the AccessToken instance.
    @access_token = prepare_access_token(current_user.token, current_user.secret)

    @response = @access_token.request(:post, "http://api.twitter.com/1/statuses/update.json", :status => "Tweet pela API")

    render :html => @response.body
end

end

La línea de render no hace nada. Por otra parte, si añado

<p><%= @response %></p>

a mi modo de ver, lo entiendo

#<Net::HTTPUnauthorized:0x2ac5149e94f0>

Sin embargo, yo soy capaz de obtener el nombre de usuario de la cuenta de twitter.

Mi modelo de usuario es la siguiente:

class User < ActiveRecord::Base
def self.create_with_omniauth(auth)  
       create! do |user|  
         user.provider = auth["provider"]  
         user.uid = auth["uid"]  
         user.name = auth["user_info"]["name"] 
         user.token = auth['credentials']['token'],
         user.secret = auth['credentials']['secret'] 
       end  
    end  
 end

¿Qué estoy haciendo mal?

¿Fue útil?

Solución

He descubierto el problema y ahora me siento bastante tonta. Hubo una coma en el modelo de usuario que no debería estar allí. El modelo debe ser

class User < ActiveRecord::Base
    def self.create_with_omniauth(auth)  
       create! do |user|  
         user.provider = auth["provider"]  
         user.uid = auth["uid"]  
         user.name = auth["user_info"]["name"] 
         user.token = auth['credentials']['token']
         user.secret = auth['credentials']['secret'] 
       end  
    end  
end

Y ahora todo funciona bien.

Otros consejos

En lugar de codificar esto manualmente., Es posible que desee probar el uso de la gema de twitter (joya instalar twitter.) Obras para nosotros. La sintaxis es:

httpauth = Twitter::HTTPAuth.new(twitterName, twitterPass)
client = Twitter::Base.new(httpauth)
client.update(yourTweetText)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top