2016-11-16 16 views
0

私はjqueryを使用しています。すべてのリクエストにヘッダを追加してリダイレクト

ユーザログにヘッダに認証情報が必要な場合。

たちは、リダイレクトを行うときのように見える、我々はAJAX呼び出しを行った後、ヘッダはもう

が何らかの理由ではないでしょうか?

jQueryを使って私のコード

$('#loginform').submit(function(event) { 

    event.preventDefault(); 
    var header = btoa($('#username').val() + ":" + $('#password').val()); 

    $.ajaxSetup({ 
    headers: { 
     "Authorization": "Basic " + header 
    } 
    }); 


    $.ajax({ 
    timeout: 1000, //check if really needed 
    type: 'get', 
    url: '/rest/members/1', 
    headers: { 
     "Authorization": "Basic " + header 
    } 

    }).done(function(data, textStatus, jqXHR) { 

    $("#error-login-form").addClass("hidden"); 
    var deferredUsername = getNameByUsername(); 

    $.when(deferredUsername).then(function() { 
     window.location = "main.html"; 
    }); 

    }).fail(function(jqXHR, textStatus) { 

    if (jqXHR.status == 401) { 
     $("#error-login-form").removeClass("hidden"); 
    } 
    }); 
}); 
+0

、およびチェックを追加しますそれは毎回のリクエストで*一度チェックしてから、ランダムなIDなどのCookieを使用して、ユーザーを追跡します。 – adeneo

+0

はあまりにも悪くないようですhttps://zinoui.c​​om/blog/ajax-basic-authentication –

+0

コメントで投稿した例では、[HTTP認証とPHP](http://php.net/manual/en/features)を使用しています。 http-auth.php)これは、ログイン情報をログインスクリプトに送信するログインページを持つことと同じではありません。これは、@ adeneoのようなクッキーや認証成功のセッション変数を設定します。ここに本当に必要なものは不明です。しかし、確かに、質問に投稿したスクリプトは成功することはできません。 –

答えて

0

あなたはbeforeSendでそれを使用することができます。それが送信される前に(jQueryの1.4.xの中に、XMLHTTPRequestを)jqXHRオブジェクトを修正するために使用することができるbeforeSend

事前要求コールバック機能のjQueryのドキュメントを1として

     beforeSend: function (xhr) { 
         var authorizationCode = $.base64('encode', 'userName' + ":" + 'password'); 
         xhr.setRequestHeader ("Authorization", "Basic " +authorizationCode); 
         xhr.setRequestHeader ("Content-Type", "application/json;charset=utf-8"); 

        } 

ようなもの。これを使用してカスタムヘッダーなどを設定します。jqXHRおよびsettingsオブジェクトは引数として渡されます。これはAjaxイベントです。 beforeSend関数でfalseを返すと、リクエストがキャンセルされます。 jQuery 1.5以降、beforeSendオプションはリクエストのタイプに関係なく呼び出されます。

0

var header = btoa($('#username').val() + ":" + $('#password').val()); 
$.cookie('cookie_authorization', header); 

を試してみて、すべてのあなたのAJAX呼び出しのために、

headers: { 
     "Authorization": "Basic " + $.cookie('cookie_authorization') 
} 
あなたはそれが間違っている、あなたは、ヘッダーにユーザー名とパスワードを入れないでやっている
関連する問題