1

Ich habe eine Rails-Anwendung, die Devise für die Benutzerauthentifizierung verwendet. Ich entwickle ein Add-on und benutze Ajax Ich mache einen Post zu meiner Anmeldung Route senden Benutzername und Passwort (Benutzer [E-Mail] und Benutzer [Passwort]) Parameter.Mozilla Hinzufügen bei dem Versuch, sich bei einer Rails-Anwendung anzumelden, die Devise verwendet

Ich versuche, eine Post an die XML-Route (Benutzer/sign_in.xml) zu machen, damit ich eine XML-Antwort bekomme. Der Rails-Server funktioniert einwandfrei und erstellt die Sitzung.

Ich führe das von Ajax und es gibt Erfolg zurück. Wenn ich danach versuche, einen anderen Dienst auszuführen, der eine Authentifizierung erfordert, wird ein Fehler zurückgegeben, der besagt, dass ich nicht angemeldet bin. Möglicherweise muss ich bei den nächsten Aufrufen an den Rails-Server einen Cookie speichern oder einen Cookie senden.

Von Content-Skript Ich rufe:

function signInSubmit(){ 
    var email = $('#sign_in_email').val(); 
    var password = $('#sign_in_password').val(); 
    signIn(email, password); 
} 

function signIn(email, password){ 
    var sign_in_data = { 
     'user[email]' : email, 
     "user[password]" : password 
    } 
    var params = EncodeQueryData(sign_in_data); 
    invoke("https://stackoverflow.com/users/sign_in", params, signInCallBack); 
} 

function invoke(url_method, parameters, callback){ 
    var url = url_api + url_method + ".xml?" + parameters; 
    var req = new XMLHttpRequest(); 
    type = 'POST'; 

    req.open("POST", url, true); 
    req.overrideMimeType('text/xml'); 
    req.onreadystatechange = function() { 
     if (req.readyState == 4) { 
      if (req.status == 200) { 
       callback(req.responseXML); 
      }else if(req.status == 201){ 
       callback(req.responseXML); 
      } 
     } 
    }; 
    req.send(); 
} 

function signInCallBack(doc){ 
    //This returns an XML saying that authentication was successfull. 
    // Session was created in the server 
    login_session_key = doc.getElementsByTagName("email")[0].childNodes[0].nodeValue 
    callMethodThatNeedsAuthentication(); 
} 


function callMethodThatNeedsAuthentication(){ 
    // This method call returns a not authenticated error. 
    invoke("/api/methodthatneedsauthentication", "", NeedsAuthenticationCallBack); 
} 

Was denken Sie?

Antwort

1

Sie haben recht - wenn Sie eine Sitzung mit Ihrer Rails-App aus SDK-Code erstellen und verwenden und die Sitzung beibehalten müssen, indem Sie alle von der Rails-App festgelegten Cookie-Daten zurückgeben.

Ich weiß nicht, wie Rails-Sitzung funktioniert, aber was Sie wahrscheinlich tun müssen, ist das Session-Cookie erfassen, das von Rails verwendet wird, und es mit nachfolgenden Anforderungen erneut zu senden. Ich glaube nicht, dass das Request-Modul Ihnen erlauben wird, Cookies zu manipulieren (siehe diesen Fehler: https://bugzilla.mozilla.org/show_bug.cgi?id=741156), aber ich weiß, dass Sie mit PHP stattdessen den Sitzungsschlüssel als Anforderungsparameter angeben können.

+0

Wie kann ich eine Sitzung aus SDK-Code verwenden? Denken Sie daran, dass ich im Inhaltsskript eines FireFox Add On – Tony

+0

@Tony: Die Tatsache, dass Sie ein Inhaltsskript (und 'XMLHttpRequest' nehme ich denke) gehört in die Frage - bitte bearbeiten Sie es, um zu erklären, wie Sie genau anmelden . –

+0

Ich habe den Fragen einen Code hinzugefügt. Kannst du mir helfen? – Tony

Verwandte Themen