Lors de la migration d'une de mes applications rails 3 en rails 4 (et devise 2.0.1 en 3.1.0). J'ai eu des petits soucis, deux pour être précis, un lié à Devise >2.0.1 et un à Rails >3 :
1) Rails 4
Rails 4 : ne permet plus d'action si l'authenticityToken n'est pas présent ou invalide (comme c'est pour une API, je ne veux pas de Auth..Token), voici la solution :
#protect_from_forgery with: :exception
protect_from_forgery with: :null_session, :if => Proc.new { |c|
c.request.format == 'application/json' }
Si le format de la requête est en JSON on ne protège pas l'action. A vous de voir si ça pose un problème de sécurité.
2) Devise
Il faut dire explicitement à Devise de répondre aux requêtes json : à mettre dans config/application.rb et non dans l'initalizers/devise.rb !
config.to_prepare do
DeviseController.respond_to :html, :json
end
Cette API est par exemple utilisée par RubyCas devise authenticator.
Normalement tout devrait fonctionner.
A lire aussi :