2011-05-12 8 views
6

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.Uso de Devise 1.3 para autenticar las solicitudes de inicio de sesión de JSON

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

Gracias! Satyam

Respuesta

6

Quizás éste>http://jessehowarth.com/devise?

Planeo hacer lo mismo en una semana o dos.

+0

Gracias mucho! Eso ayudó. – Satyam

+0

Para el registro, terminé teniendo un montón de problemas con Devise + JSON. Recomiendo usar Rails 3.1 has_secure_password y agregar sus propias características personalizadas. –

+1

¡Malditas! No podemos encontrar esa página. – tambykojak

4

La solución de Jesse Howarth interrumpirá el registro con el navegador al usar respuestas de formato html. Si desea realizar tanto JSON y HTML para trabajar tratar calle detrás de esta manera:

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 se olvide de cambiar sus rutas de utilizar este controlador

+1

Como he comentado anteriormente, hazlo por ti mismo si estás utilizando Rails 3.1.0 o posterior. –

+0

@Tombart, el enfoque funciona bien para el inicio de sesión correcto de uid/pwd json. ¿Cómo manejar el caso de contraseña incorrecta? el userwarden.authenticate!() escupirá html redirect con un mensaje de texto sin formato. – GeorgeW

6

no pude conseguir a la página enlazada en la respuesta principal, así que pensé en agregar la mía. No necesita crear ningún controlador personalizado. Todo lo que necesita hacer es la siguiente:

En su application.rb añadir lo siguiente en su clase de aplicación

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

En config/inicializadores/devise.rb añadir :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, se puede enviar un objeto JSON a sign_in.json o lo que sea que haya configurado en sus rutas para el inicio de sesión.

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

Y en caso de éxito devolverá 201 creados, 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."} 

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

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

Cuestiones relacionadas