with rails based auth ruby-on-rails json api devise

ruby on rails - rails - Usando Devise 1.3 para autenticar solicitudes de inicio de sesión JSON



token based auth rails (3)

Soy nuevo en los rieles. Estoy tratando de escribir una API para una aplicación móvil que se autentica con JSON. Quiero usar Devise para la autenticación. Creo que Devise> 1.3 agrega soporte para JSON también, pero no puedo encontrar ningún ejemplo o literatura sobre él.

¿Puede alguien indicarme algún recurso para esto o proporcionar algún código de muestra?

¡Gracias! Satyam


La solución de Jesse Howarth interrumpirá el registro con el navegador al usar respuestas de formato html. Si quieres hacer que tanto JSON como HTML funcionen, prueba algo como esto:

class SessionsController < Devise::SessionsController def create resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new") set_flash_message(:notice, :signed_in) if is_navigational_format? sign_in(resource_name, resource) respond_to do |format| format.html { respond_with resource, :location => after_sign_in_path_for(resource) } format.json { return render :json => { :success => true, :user => resource } } end end end

Y no olvides cambiar tus rutas para usar este controlador


No pude acceder a la página vinculada en la respuesta superior, así que pensé en agregar la mía. No necesita crear ningún controlador personalizado. Todo lo que necesitas hacer es lo siguiente:

En su application.rb agregue lo siguiente en su clase de aplicación

config.to_prepare do DeviseController.respond_to :html, :json end

En config / initializers / devise.rb agregue :json a los formatos. Esta línea está comentada por defecto, por lo que tendrá que descomentar la línea.

config.navigational_formats = [''*/*'', :html, :json]

Después de esto, puede enviar un objeto json a sign_in.json o lo que haya configurado en sus rutas para iniciar sesión.

{ "user": { "email": "[email protected]", "password": "blah" } }

Y en caso de éxito devolverá 201 creado, y el usuario conectado como un objeto JSON. En caso de error, devolverá 401 con un mensaje JSON que indica el motivo de la falla.

Ejemplo:

{"error":"Invalid email or password."}

Este es un buen ejemplo si está utilizando Backbone / Marionntte en la parte delantera.

http://joshhuckabee.com/integrating-devise-backbonejs