Usar token de autenticación desde encabezados de solicitud en lugar de parámetros POST/PUT con Rails 3 / devise
Necesito usar la autenticación basada en tokens en una API de Rails 3.1 junto con la versión más reciente de devise. No hay problema hasta ahora.
Ahora no quiero añadir my :auth_token a los parámetros POST/PUT del lado del cliente, sino enviar este token como un encabezado de solicitud como HTTP_X_MYAPP_AUTH_TOKEN".
¿Puedo convencer a devise de usar eso en lugar de un token de parámetros? ¿Es posible implementar ambos, para que los usuarios de mi API puedan enviar el token a través del encabezado de solicitud O Parámetro POST / PUT?
Saludos. Felix
4 answers
Tenía 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
Tenga en cuenta que tengo mi dispositivo Devise.token_authentication_key
establecido en api_key
.
config.token_authentication_key = :api_key
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-28 13:55:48
Estoy usando una "estrategia" personalizada para esto: https://gist.github.com/4492569
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-09 11:49:51
En Devise es posible 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, consulte aquí. 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
Las pruebas desde la línea de comandos con curl serían así:
echo "HUGP59gXsd7773a75Dvc:X" | base64
=> SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=
curl --header "Authorization: Basic SFVHUDU5Z1hzZDc3NzNhNzVEdmM6WAo=" \
http://localhost/users.xml
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:17
Usando devise y devise-token_authenticatable, tuve que establecer esto en mi config/initializers/devise.rb para pasar el token a través de encabezados http:
config.http_authenticatable = true
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-30 04:15:38