1

それを使用してリクエストを行うときは、次のcurl --basic --user someuser:somepass http://someurl/ようなヘッダーを追加しますAuthorization: Basic Y2FsaWRvZzpmMDBmM2IwMg==。これはもちろん、

基本アクセス認証は、Web ブラウザーまたはその他のクライアント プログラムが要求を行うときにユーザー名とパスワードを提供するための方法です。送信前に、ユーザー名にコロンが追加され、パスワードと連結されます。結果の文字列は Base64 アルゴリズムでエンコードされ、HTTP ヘッダーで送信され、受信者によってデコードされ、コロンで区切られたユーザー名とパスワードの文字列になります。基本アクセス認証は、1996 年に RFC 1945 [http://en.wikipedia.org/wiki/Basic_access_authentication][1] [1]: http://en.wikipedia.org/wiki/Basic_access_authenticationによって最初に定義されました。

すべての ExtJS 4.1 Ext.data.proxy.Rest プロキシでこれをすべてのリクエストに追加する方法を探しています。簡単な作業のように思えますが、ドキュメントが見つかりません。ちなみに、一般的にheaders: {'X_MyHeader':'somevalue'}プロパティを介してプロキシにヘッダーを追加する方法は知っています。現在のユーザー名/パスワードに対してグローバルに実行するよう Ext に指示する方法がわかりません。

4

1 に答える 1

0

OAuth トークンを Ext.data.proxy.Rest プロキシに適用するための同様のソリューションを探していましたが、それに関する情報が見つかりませんでした。これを行う方法について何もないことに非常にショックを受けました。やり方が間違っていると思わせてくれます。とにかく、これを達成するために私が思いついたものはここにあります。

Ext.data.proxy.Ajaxすべてのプロキシに適用されるように、静的変数をオーバーライドして保持します。次に、set authHeader を現在のヘッダーのリストとマージして、プロキシごとにカスタマイズできるようにします。

Ext.override(Ext.data.proxy.Ajax, {

    statics: {
        authHeader: undefined,
    },

    /**
     * @cfg {Object} headers
     * Any headers to add to the Ajax request. Defaults to undefined.
     */

    doRequest: function(operation, callback, scope) {
        var writer  = this.getWriter(),
            request = this.buildRequest(operation, callback, scope);

        if (operation.allowWrite()) {
            request = writer.write(request);
        }
        console.log(this.headers);
        Ext.apply(request, {
            headers       : Ext.apply(this.headers, Ext.data.proxy.Ajax.authHeader) || Ext.data.proxy.Ajax.authHeader,
            timeout       : this.timeout,
            scope         : this,
            callback      : this.createRequestCallback(request, operation, callback, scope),
            method        : this.getMethod(request),
            disableCaching: false // explicitly set it to false, ServerProxy handles caching
        });

        Ext.Ajax.request(request);

        return request;
    }
});

次に、ローカル ストレージでトークンを探します。存在する場合はグローバルに設定し、存在しない場合はログインを求めます。

MyApp.model.AuthToken.load(1, {
    callback: function(record) {
        // If we don't have anything in local storage for the user, show the login box.
        if (record.get('access_token') == '') {
            var window = Ext.create('MyApp.view.Login');
            window.show();
        } else {
            Ext.data.proxy.Ajax.authHeader = { 'Authorization': 'Bearer ' + record.get('access_token') };
        }
    }
});

トークンの有効期限と更新要求を処理するための追加のロジックがいくつかあるはずですが、アイデアはわかります!

于 2012-08-09T10:15:07.230 に答える