1

私はDeviseをユーザ認証に使用するRailsアプリケーションを持っています。私はアドオンを開発しており、ajaxを使用して、ユーザー名とパスワード(ユーザー[電子メール]とユーザー[パスワード])パラメータを送信するルートのサインに投稿を行います。Mozilla Devitsを使用するRailsアプリケーションにログインしようとして追加します

私はxmlルート(users/sign_in.xml)に投稿をしようとしていますので、XML応答を取得します。 Railsサーバーは正常に動作し、セッションを作成します。

私はそれをajaxから実行し、成功を返します。その後、認証が必要な別のサービスを実行しようとすると、ログインしていないことを示すエラーが返されます。次回のRailsサーバー呼び出しでCookieを保存するか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を取得し、後続のリクエストで再送信することです。リクエストモジュールでこれを行うためのクッキーを操作することはできません(このバグ:https://bugzilla.mozilla.org/show_bug.cgi?id=741156を参照)。しかし、PHPではリクエストパラメータとしてセッションキーを提供することができます。

+0

SDKコードからセッションを使用するにはどうすればよいですか? FireFoxのコンテンツスクリプトに載っていることを覚えておいてください。Add On – Tony

+0

@Tony:あなたがコンテンツスクリプト(と私が推測する 'XMLHttpRequest')を使用しているという事実は、質問に属しています。 。 –

+0

質問にいくつかのコードを追加しました。私たちを手伝ってくれますか? – Tony