tutorial rails learn español course code ruby-on-rails authentication devise token

ruby on rails - learn - Usar auth_token desde los encabezados de solicitud en lugar de los parámetros POST/PUT con Rails 3/idear



ruby on rails tutorial español pdf (4)

Es posible en Devise pasar un token de autenticación estándar a través de una cadena de consulta o el encabezado para la Autenticación Básica HTTP, ver here . El código Ruby de las especificaciones para pasar el token en el encabezado HTTP_Authorization es

header = "Basic #{Base64.encode64("#{VALID_AUTHENTICATION_TOKEN}:X")}" get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header

La prueba desde la línea de comando con curl sería así:

echo "HUGP59gXsd7773a75Dvc:X" | base64 => SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo= curl --header "Authorization: Basic SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=" / http://localhost/users.xml

Necesito usar autenticación basada en token en una API de Rails 3.1 junto con la versión más reciente de idear. No hay problema hasta el momento.

Ahora no quiero agregar mi: auth_token a los parámetros POST / PUT en el lado del cliente, pero enviar este token como un encabezado de solicitud como HTTP_X_MYAPP_AUTH_TOKEN ".

¿Puedo convencer al dispositivo de que use eso en lugar de un token de los parámetros? ¿Es posible implementar ambos, para que mis usuarios de API puedan enviar el token mediante el encabezado de solicitud O el parámetro POST / PUT?

Saludos. Felix



Tuve la misma necesidad y se me ocurrió esta solución:

class YourController < ApplicationController prepend_before_filter :get_api_key before_filter :authenticate_user! private def get_api_key if api_key = params[:api_key].blank? && request.headers["X-API-KEY"] params[:api_key] = api_key end end end

Nota Tengo mi Devise.token_authentication_key establecida en api_key .

config.token_authentication_key = :api_key


Usando idear y idear-token_authenticatable, tuve que configurar esto en mi config / initializers / devise.rb para pasar el token a través de encabezados http:

config.http_authenticatable = true