secret developers developer clave ruby-on-rails ruby twitter oauth

ruby on rails - developers - Sigue obteniendo OAuth:: Error no autorizado al usar gemas de rubí de oauth y twitter



twitter developers api (8)

Esta fue una de las cosas más molestas para depurar que he encontrado. Estaba produciendo en un par de lugares por accidente porque las URL son dinámicas y no estaban definidas en mi caso de prueba (utilizo esto para mostrar datos de gráficos y no hay suficiente en este momento para que las URL de la API google chart estén en blanco). Esto causó que mi navegador realizara varias solicitudes a mi servidor local cuando se cargaron algunas páginas. De alguna manera eso hizo que el oauth fuera un desastre. Obviamente no hay forma de que las personas en SO conozcan mi problema específico de aplicación, así que tuve que responder mi propia pregunta.

Estoy usando ruby ​​twitter gem y oauth para obtener acceso a las cuentas de twitter de los usuarios. En mi código, tengo:

unless @user.twitter_authd? oauth = Twitter::OAuth.new(''token'', ''secret'') session[:twitter_request_token] = oauth.request_token.token session[:twitter_request_secret] = oauth.request_token.secret @twitter_auth_url = oauth.request_token.authorize_url end

donde token y secret tienen mi token y secreto insertados. Cuando hago clic en el enlace a @twitter_auth_url, me llevan a Twitter y se me pide que otorgue acceso. Hago clic en "permitir" y luego en Twitter me redirige a mi URL de devolución de llamada http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY que luego acierta con este código:

oauth = Twitter::OAuth.new(''token'', ''secret'') logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}") logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}") oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret]) session[:twitter_request_token] = nil session[:twitter_request_secret] = nil @user.update_attributes({ :twitter_token => oauth.access_token.token, :twitter_secret => oauth.access_token.secret, }) redirect_to root_path

El token de solicitud de twitter y el secreto se están configurando bien. Sin embargo, termino con un error de autorización:

OAuth::Unauthorized in MainController#twitter_callback 401 Unauthorized RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls Application Trace | Framework Trace | Full Trace /Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request'' /Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token'' /Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request'' /Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback''

El código está fallando en esta línea:

oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])

cuando intenta obtener un token de acceso. Puede ver el código fuente de authorize_from_request here . No estoy seguro de por qué ocurre esto. Alguien tiene ideas?


Este problema parece deberse a que Twitter no puede manejar la connection keep-alive correctamente. Asegúrese de establecer la connection=close http header en la solicitud a Twitter. Perdí un fin de semana depurando esto.


Llegué un poco tarde a la fiesta pero me encontré con el mismo problema. Seguí el problema hasta la configuración de mi aplicación OAuth en Twitter. Inicialmente no había especificado una URL de devolución de llamada ya que no estaba seguro de ello.

Una vez que configuré la aplicación Rails, volví a encontrar que Twitter había asumido que era una aplicación de escritorio, ya que no había especificado una URL de devolución de llamada. Una vez que cambié esto al sitio web e ingresé una URL de devolución de llamada, dejé de obtener 400s.


Si obtiene el error 401 - OAuth :: Unauthorized, asegúrese de editar la configuración de su aplicación de Twitter de la siguiente manera:


Tuve el mismo problema y ninguna de las sugerencias en este hilo funcionó para mí.

Encontré que el problema para mí era TIMESTAMP en mi pedido. El dispositivo móvil en el que ejecutaba mis scripts tenía un reloj sincronizado. Cuando actualicé la hora del sistema en mi dispositivo a la hora correcta (es decir, ahora), todas mis solicitudes regresaron "200 OK" en lugar de "401 no autorizado".


Twitter no permite el localhost como parte de una URL de devolución de llamada válida.

En su lugar, use http://127.0.0.1:3000/auth/twitter/callback

Espero que esto ayude


este es un problema sobre la sincronización de tiempo de su sistema con el servidor de Twitter.


no hay suficiente información para mí, pero ¿cuándo se actualizó twitter gem por última vez? Twitter cambió sus oauth ''cosas'' a mediados de mayo aprox. tal vez tienes uno viejo. Actualizaría tu pregunta para mostrar callback_url y asegúrate de tener el token y el secreto correctos, que parece que no tienes.

también, ¿has puesto la URL de devolución de llamada correcta en la página de tu aplicación de Twitter? muchas veces eso te fastidia también.

si eso falla usa mbleighs twitter_auth lugar. funcionó para mí y es bastante astuto.