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.
Quizás este> http://jessehowarth.com/devise ?
Planeo hacer lo mismo en una semana o dos.