2012-03-30 24 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

相关问题