2017-06-12 4 views
1

MarkLogic9アプリケーションのカスタムログインページを作成しています。私はhttp:// localhost:8601上にhttpサーバ(サーバ側のjavascript)を持っています。 login.sjsページはシンプルです:MarkLogicアプリケーションサーバーのカスタムログインページは、Ajax GETリクエストからSessionID Cookieを受け取りません

xdmp.addResponseHeader('Access-Control-Allow-Origin', '*'); 
xdmp.addResponseHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 
xdmp.addResponseHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 
xdmp.addResponseHeader('Access-Control-Allow-Credentials', "true"); 

xdmp.setResponseContentType("text/plain"); 

//generate object with field names from Request params 
var params ={}; //JSON parsed URL parameters 
var field_names = xdmp.getRequestFieldNames().toArray(); 
for(var fname_idx in field_names){ 
    params[field_names[fname_idx]] = String(xdmp.quote(xdmp.getRequestField(String(field_names[fname_idx])))); 
} 
//get username and password from passed paramters 
var username = params.username; 
var password = params.password; 
xdmp.login(username,password); 

私はこのページを直接(すなわちローカルホストを入力?:8601/login.sjsユーザ名=テスト&パスワード=テスト)にアクセスすると、それが正常にログインし、これらを使用して応答しますヘッダ:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:X-Requested-With,content-type 
Access-Control-Allow-Methods:GET, POST, OPTIONS, PUT, PATCH, DELETE 
Access-Control-Allow-Origin:* 
Connection:Keep-Alive 
Content-Length:4 
Content-type:text/plain; charset=UTF-8 
Keep-Alive:timeout=5 
Server:MarkLogic 
Set-Cookie:SessionID=917f127921feb6ef; path=/ 

私は、次のAJAX要求を送信し、私のクライアント側のlogin.htmlページからページにアクセスしようとすると問題が発生する」

$("#login-button").click(function(event){ 
    var un = $("#username").val(); 
    var pw = $("#password").val(); 
    if(un){ 
     params.username = $("#username").val(); 
    } 
    if(pw){ 
     params.password = $("#password").val(); 
    } 
    event.preventDefault(); //prevent form from clearing 
    console.log("input entered"); 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: params, 
     success: function(data){ 
      alert("login worked"); 
      if(data == "true"){ 
       console.log("worked"); 
       checkUsername(); 
       //window.location.href = "homepage.html"; 
      } else{ 
       alert("login failed"); 
       invalidLogin(); 
      } 
     }, 
     error: function(data){ 
      invalidLogin(); 
     } 
    }); 
}); 

この意志成功したセッションIDクッキーが含まれていないだけでなく、ログインが、ヘッダは、サーバから返さ:

Content-Length:3022 
Content-type:text/html 
Date:Mon, 12 Jun 2017 08:03:36 GMT 
Last-Modified:Mon, 12 Jun 2017 07:03:45 GMT 
Server:SimpleHTTP/0.6 Python/2.7.13 

私の質問:なぜ私のlogin.htmlとのAJAXリクエストページがサーバーからのCookieレスポンスヘッダを受信および/またはされていませんどうすれば修正できますか?

マイセットアップ:

  • Marklogic 9
  • 私は(管理者を含む)は、複数のユーザで試してみましたが、ポート8010上のポート8601
  • PythonのSimpleServerと(すべてのローカルホスト)
  • 上のHTTPアプリケーションサーバ私はそれがprivelegesの問題だとは思わない。

ありがとうございます。

+0

2番目の要求のサーバー応答ヘッダーが疑わしいと思われます。あなたのAJAXコールはいくつかのミドルウェアまたはプロキシを経由しますか? – grtjn

+0

私はそうは思わない、すべてがローカルにホストされている。私は決定的に決定するのに十分なものはありませんが。私が確認できる方法はありますか?また、クロスドメインリクエストを使用していることとは関係がありますか?または、私はPython SimpleHTTPServerの代わりにApacheなどを使用していますか? –

答えて

0

重複している可能性があります。別の投稿で回答が見つかりました。 Get and store cookie (from Set-Cookie) from an AJAX POST response

私はちょうど私のAJAXリクエストに次の行含める必要がありました:あなたはあなたの中にアクセス制御 - 許可 - 起源ヘッダをワイルドカードを持っている場合、このエラーがスローされますので

xhrFields: { withCredentials: true }, 

を、私はまたしていましたこれに

xdmp.addResponseHeader('Access-Control-Allow-Origin', '*'); 

xdmp.addResponseHeader('Access-Control-Allow-Origin', 'http://localhost:8010'); 

そして今、私のブラウザが収集し、この行を変更クッキー。

関連する問題