2011-04-29 4 views
1

Je suis assez nouveau à Ruby et RoR, et j'ai eu des problèmes avec un problème et je n'arrive à rien. Fondamentalement, je construis un webservice "proxy" qui va gérer certaines demandes, en les transmettant à un site web tiers. La réponse reçue du site Web de la tierce partie est en HTML, qui sera ensuite analysée et une réponse XML appropriée sera donnée.Envoyer des demandes POST à ​​partir du contrôleur Rails pour l'authentification

Je suis à un point où je dois envoyer des requêtes POST via mon contrôleur Rails pour authentifier un utilisateur, que je fais en utilisant ce code:

require "net/http" 
require "uri" 

uri = URI.parse("http://myurl.com/members.cgi") 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Post.new(uri.request_uri) 
request.set_form_data({"email_login" => "[email protected]", "password_login" => "password"}) 
response = http.request(request) 

Mon problème se trouve sur la réponse que je je reçois. Cette requête POST spécifique, lorsqu'elle est réussie (c'est-à-dire que l'utilisateur s'est authentifié avec succès), renvoie une redirection 302. Cela en soi est pas un problème, car je peux suivre la redirection en obtenant la valeur d'en-tête « emplacement »:

redirectLocation = response['location'] 

Là où je suis en train coincé est en moi maintenant authentifiées en suivant la redirection avec la ligne suivante:

redirectResponse = Net::HTTP.get_response(URI.parse(redirectLocation)) 

Cela fait suite à la redirection mais renvoie une réponse montrant que je ne suis pas ?? authentifie

Je ne comprends pas vraiment pourquoi cela se produit. Je vois qu'il ya un cookie d'authentification étant retourné avec ma réponse originale en lisant:

response['cookie'] 

Donc finalement ma question est ce que dois-je faire pour obtenir le serveur de reconnaître mon statut d'authentification? Passer le cookie avec ma deuxième demande en quelque sorte? Si oui, comment puis-je le faire?

Merci beaucoup d'avance pour votre temps!

Rog

Répondre

1

Oui, vous devez définir le cookie. Je pense que cela vous donne probablement une sorte d'identifiant de session. Ce que vous devez passer avec chaque demande.

regardez this extrait de code pour un exemple sur la façon de transmettre un cookie que vous obtenez en réponse à vos nouvelles demandes.

+0

Merci, mais comment faire? – Rog

+0

vient d'ajouter un lien vers un exemple. c'est assez facile. son rubis;) – thekindofme

+0

Merci tas pour m'indiquer dans la bonne direction. – Rog

Questions connexes