2012-03-30 22 views
1

我有一個使用Devise進行用戶身份驗證的Rails應用程序。我正在開發一個附加組件並使用ajax,我在發送用戶名和密碼(用戶[email]和用戶[password])參數的路由中發佈了一條信息。Mozilla添加試用登錄到使用Devise的Rails應用程序

我想做一個帖子到XML路線(users/sign_in.xml),所以我得到一個XML響應。 Rails服務器正常工作並創建會話。

我從ajax執行它並返回成功。之後,如果我嘗試執行另一個需要身份驗證的服務,它會返回一條錯誤消息,指出我沒有登錄。也許我必須存儲cookie或在接下來的Rails服務器調用中發送cookie。

從內容腳本,我呼籲:

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); 
} 

你覺得呢?

回答

1

您是對的 - 如果您需要通過SDK代碼與您的rails應用程序建立和使用會話,並通過傳回由rails應用程序設置的任何cookie數據來維護會話。

我不知道Rails會話是如何工作的,但是您可能需要做的是捕獲rails使用的會話cookie,並將它隨後的請求重新發送。我不認爲請求模塊將允許您操作cookie來執行此操作(請參閱此錯誤:https://bugzilla.mozilla.org/show_bug.cgi?id=741156),但我知道使用PHP您可以將會話密鑰作爲請求參數提供。

+0

如何從SDK代碼使用會話? 請記住,我在FireFox的內容腳本中添加On @ – Tony 2012-03-31 13:37:57

+0

@Tony:我使用內容腳本(和「XMLHttpRequest」,我猜)屬於這個問題 - 請編輯它以解釋如何準確登錄。 – 2012-04-02 05:42:52

+0

我在問題中添加了一些代碼。你可以幫幫我嗎? – Tony 2012-04-02 13:56:53

相關問題