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
Estoy usando una "estrategia" personalizada para esto: https://gist.github.com/4492569
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