ruby-on-rails - based - ruby on rails jwt
DiseƱar autenticaciĆ³n API (4)
Devise se basa en Warden, un middleware de autenticación para Rack.
Si necesita implementar su propia forma (alternativa) para autenticar a un usuario, debe echarle un vistazo a Warden en combinación con las estrategias que se incluyen con Devise: https://github.com/plataformatec/devise/tree/master/lib/devise/strategies
Estoy trabajando en una aplicación web de rieles que también proporciona API basada en JSON para dispositivos móviles. se espera que los clientes móviles primero obtengan un token con (correo electrónico / pase), luego los clientes realizarán llamadas API subsiguientes con el token.
Soy bastante nuevo en Devise, y estoy buscando un API Devise que parezca "autenticar (correo electrónico, pase) y espero que sea verdadera / falsa, luego basándome en eso, crearé y devolveré el token o devolveré un rechazo. mensaje, pero parece que Devise no ofrece algo como esto.
Soy consciente de que Devise 1.3 proporciona autenticación basada en JSON, pero eso es un poco diferente de lo que necesito: necesito generar el token y manejarlo de vuelta al cliente, luego de eso, la autenticación se realiza utilizando el token.
¿Alguien puede dar algunos consejos?
Recomiendo leer a través de Devise Wiki , ya que Devise admite nativamente la autenticación de tokens como uno de sus módulos. No he trabajado personalmente con la autenticación de tokens en Devise, pero Brandon Martin tiene un ejemplo de autenticación de token de ejemplo here .
Si token auth simplemente no es lo que desea hacer, también puede devolver una cookie y hacer que el cliente incluya la cookie en el encabezado de la solicitud. Funciona muy similar al controlador de sesiones web.
En un controlador de sesiones API
class Api::V1::SessionsController < Devise::SessionsController
skip_before_action :authenticate_user!
skip_before_action :verify_authenticity_token
def create
warden.authenticate!(:scope => :user)
render :json => current_user
end
end
En Rutas
namespace :api, :defaults => { :format => ''json'' } do
namespace :v1 do
resource :account, :only => :show
devise_scope :user do
post :sessions, :to => ''sessions#create''
delete :session, :to => ''sessions#destroy''
end
end
end
Entonces puedes hacer este tipo de cosas (ejemplos están usando HTTPie )
http -f POST localhost:3000/api/v1/sessions user[email][email protected] user[password]=passw0rd
Los encabezados de respuesta tendrán una sesión en el encabezado Set-Cookie. Pon el valor de esto en solicitudes posteriores.
http localhost:3000/api/v1/restricted_things/1 ''Cookie:_my_site_session=<sessionstring>; path=/; HttpOnly''
Hay una configuración de :token_authenticatable
llamada :token_authenticatable
. Entonces, si agrega eso al método de diseño en su "usuario", entonces puede autenticarse en su API simplemente llamando
"/api/v1/recipes?qs=sweet&auth_token=[@user.auth_token]"
Probablemente también quieras esto en tu usuario:
before_save :ensure_authentication_token
ACTUALIZACIÓN (con código de autorización API)
El método que estás buscando es:
resource = User.find_for_database_authentication(:login=>params[:user_login][:login])
resource.valid_password?(params[:user_login][:password])
aquí está mi esencia con un inicio de sesión JSON / API a escala completa con el diseño