2012-04-26 12 views
10

OAuth2 :: AccessToken.post() se especifica como esto en la documentación:Ruby on Rails: cómo usar OAuth2 :: AccessToken.post? Método

(Objeto) de la (ruta, opta = {}, & bloque)

Estoy tratando de pasar algunos argumentos , pero parece que yo estoy * haciendo mal:

response = token.post('/oauth/create.js', {:title => "title", :description => "desc"}) 

los parámetros están sin alcanzar nunca el método, los valores son siempre nula. Entonces, ¿cuál es la forma correcta de usar el método de publicación con argumentos? ¿Y qué es ese bloque &?

También recibo ADVERTENCIA: No se puede verificar la autenticidad del token CSRF. Esto también podría estar contribuyendo al problema. El caso es que estoy usando la API de OAuth desde el exterior de la aplicación. OAuth 2 se implementa a través de la gema Doorkeeper.

Actualización: La advertencia de CSRF ya no está después de que definí los ámbitos. También logro usar este método post() con argumentos al proporcionar el como parte de la url: "? Title = test & ...". Aún así sería bueno saber cómo usar este método como está documentado.

Respuesta

3

Puede utilizar el bloque para pasar parámetros a publicar solicitud:

token.post('/oauth/create.js') do |request| 
    request.params['title'] = "something" 
end 

OAuth2 joya utiliza Faraday, el objeto request es una solicitud de Faraday, por lo que es posible que desee consultar otras formas de pasar parámetros junto con el solicitud

Faraday joya =>https://github.com/lostisland/faraday

9

el cuerpo en un POST o PUT se accede a través del parámetro opciones cuerpo. No hay documentación sobre esto. Tuvimos que buscar en el código de cliente de OAuth sí para descubrir esto:

https://github.com/intridea/oauth2/blob/ebe4be038ec14b3496827d29cb224235e1c9f468/lib/oauth2/client.rb

Su ejemplo, con el cuerpo correcta sería:

response = token.post('/oauth/create.js', {body: {:title => "title", :description => "desc"}}) 
+0

Gracias por esto! Guardado mi tocino !! – Jim

+5

Y si necesita proporcionar encabezados se verá así: 'token.post ('/ some/url', {: body => json_str,: headers => {'Content-Type' => 'aplicación/json '}}) ' –