2 votes

Les paramètres de la stratégie de Warden sont vides lorsque j'essaie de m'authentifier par ajax.

J'essaie d'utiliser Warden pour l'authentification dans mon application Rails. Et cela fonctionne bien si je l'utilise avec un formulaire normal via une requête POST. Mais lorsque je l'ai déplacé vers Backbone.js, j'ai constaté que la méthode authenticate ! appelle toujours mon application en panne.

J'ai mis un peu de logging dans la méthode authenticate ! et j'ai trouvé que le hash params est vide. Comme ça :

def authenticate!
    Rails.logger.debug "Parameters inside of Warden: #{params}"
    user = User.find_by_email(params['email'])
    if user && user.authenticate(params['password'])
      success! user
    else
      fail "Invalid email #{request.params['email']} or password #{request.params['password']}!"
    end
end

Il génère une sortie vide : Paramètres à l'intérieur de Warden : {}

En même temps, je peux voir les paramètres dans le contrôleur avant que env['warden'].authenticate ! ne soit appelé. Je ne peux que deviner où sont passés mes paramètres. Qu'est-ce que je fais de mal ?

2voto

Ivan Youroff Points 400

Je suis un peu novice en matière de Rails, donc ma solution pourrait être triviale. Mais comme je n'ai rien trouvé à ce sujet, elle peut être utile à quelqu'un.

Le fait est que Warden instancie Rack::Request pour avoir accès au hash des paramètres. Et il ne supporte que 'application/x-www-form-urlencoded' et 'multipart/form-data'. http://rack.rubyforge.org/doc/classes/Rack/Request.html#M000275

Il est probable que l'analyseur syntaxique utilisé dans le contrôleur soit différent, c'est pourquoi j'étais confus. Finalement, j'ai résolu le problème avec un analyseur externe basé sur Rack : https://github.com/achiu/rack-parser

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X