2011-02-15 13 views
5

Estoy tratando de utilizar a OAuth para autenticar joya Evernote en mi Ruby on Rails aplicación. Estoy usando un tutorial para autenticar Twitter - http://blog.brijeshshah.com/integrate-twitter-oauth-in-your-rails-application/ porque no pude encontrar uno de Evernote.Cómo dar vuelta a oauth_token y oauth_verifier en token de acceso OAuth con la gema

Hasta ahora han conseguido que el usuario autorice mi solicitud y ahora tienen las credenciales temporales:

customer = OAuth::Consumer.new("xxx", "xxx",{ 
    :site=>"https://sandbox.evernote.com/", 
    :request_token_path => "/oauth", 
    :access_token_path => "/oauth", 
    :authorize_path => "/OAuth.action"}) 
@request_token = customer.get_request_token(:oauth_callback => "http://localhost:3000/create_evernote_step_2") 

session[:request_token] = @request_token.token 
session[:request_token_secret] = @request_token.secret  

redirect_to @request_token.authorize_url 

Así que ahora tengo el oauth_token y oauth_verifier, y la necesidad de convertirlas en el token de acceso. Esta parte del tutorial de Twitter parece específica de Twitter, así que ahora estoy seguro de cómo procesarla en el caso de Evernote. ¿Puede alguien ayudarme?

Respuesta

5

código de ejemplo de Evernote ahora contiene un ejemplo de Ruby OAuth que utiliza la gema de OAuth. Puede descargar el código de muestra desde http://www.evernote.com/about/developer/api/. En este caso, el siguiente paso consiste en intercambiar las credenciales temporales para las credenciales de tokens:

access_token = @request_token.get_access_token(:oauth_verifier => oauth_verifier) 

El oauth_verifier se pasa a su aplicación como parte de la URL de devolución de llamada.

+1

¿Cómo se obtiene @request_token en la devolución de llamada? ¿Ocultas el objeto en la sesión o lo vuelves a crear de alguna manera? – alltom

+0

En nuestro código de ejemplo lo escondemos en la sesión, pero debería poder recrearlo, no hay nada mágico. El token de solicitud real (no el objeto que llamé request_token) estará en la URL de devolución de llamada como el param de cadena de consulta oauth_token. – Seth

+0

¿Alguien tiene problemas para acceder a los datos almacenados en su sesión? Intento hacerlo para la devolución de llamada, pero aparece * nulo * en la acción de devolución de llamada. –

0

Hola, hombre, comencé un camino como este también, donde estaba integrando Oauth en una de mis otras aplicaciones.

Debería echarle un vistazo a oauth-plugin on github, ya que se encarga de todo ese negocio para usted.

Te debería ayudar la mayor parte del camino, y si hay un proveedor "extraño" que no es "popular", te permite agregarlo a un archivo de configuración. Eso es lo que hice con el mío.

Una sugerencia es sobrescribir todos los métodos en OauthConsumersController y 'modificarlos' según sea necesario. Sé que tenía que hacerlo y bueno, era más fácil ver lo que hacía con su complemento y modificarlo desde allí. Demonios, tal vez incluso tiene un camino que puedes seguir en su código para tu problema exacto y no necesitarás todo su complemento (ya que también usa oauth gem).

+0

Gracias por la respuesta. Quiero utilizar la gema OAuth porque no quiero generar OauthConsumersController y cosas adicionales, ya tengo un modelo para la autenticación porque estoy usando OmniAuth y quiero simplemente almacenar el Token de acceso de Evernote en el modelo existente. – ben

0

Además del útil ejemplo de Evernote, es posible que también desee automatizar el ciclo de "redirigir al usuario, permitirles acceder, recibir una nueva redirección" en una prueba unitaria. He descubierto que un poco difícil, por lo que he publicado todo el código para hacerlo aquí:

Evernote OAuth in a unit test

0

al obtener el accessToken por respuesta de Seth, necesita el token de solicitud que ha creado al generar la URL de autorización. Esto necesita almacenar en el objeto de sesión. Si almacena directamente, generará un error al recuperar el token de solicitud almacenado. Entonces necesita almacenar eso en cache_store.

Con el fin de hacer frente a solicitud de token token y acceso a la API de Evernote en su raíles aplicación, puede seguir los siguientes pasos:

que necesita para configurar una sesión de cache_store para guardar los tokens OAuth de Evernote. Añadir lo siguiente al final de config/inicializadores/session_store.rb:

Rails.application.config.session_store :cache_store, key: ‘_rails-evernote_session’ 

De esta manera, su puede almacenar los objetos de sesión y se puede recuperar cuando sea necesario.

Para obtener información más detallada, puede consultar el siguiente tutorial.- https://codepen.io/asommer70/post/export-evernote-notes-with-rails

Cuestiones relacionadas