1

ログインするために、このような API と対話するためのいくつかの単純な JavaScript 関数があります。

    login: function(username, password) {
    var calledUrl = baseapi + "user/login/" + credentials;
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": username,
            "password": password

        },
        {"Accept" : "application/json"}
    );
},

問題は、URL でいくつかの資格情報を渡す必要があり、次のようになることです。

var credentials = "?api_username=" + api_username + "&api_key=" + api_key;

現在、この変数はいくつかのテストを行うためにハードコーディングされていますが、もちろん関数を使用する人ごとに変更する必要があります。リクエストごとにそれを求めたくありません。この場合、 と のみを求めusernameますpassword。初期化プロセス中またはそれが呼び出されたときに一度だけ要求し、さまざまな機能を実行するときにそれを覚えておきたいと思います。

4

2 に答える 2

1

が通常、資格情報を必要とする最初のメソッドである場合.login()は、そのメソッドの必須引数にして、資格情報をオブジェクトに格納できます。

login: function(username, password, credentials) {
    // save credentials for use in other methods    
    this.credentials = credentials;
    var calledUrl = baseapi + "user/login/" + credentials;
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": username,
            "password": password

        },
        {"Accept" : "application/json"}
    );
},

次に、他の方法で、このユーザーの認証情報にアクセスできますthis.credentials

最初に呼び出すことができ、それらの資格情報が必要な他のメソッドがある場合は、資格情報をそれらの引数にするか、資格.init()情報を確立するだけのメソッドを作成するか、このオブジェクトのコンストラクター。


おそらく、次の行も修正する必要があります。

 calledUrl.post(...)

calledUrlは文字列であり、.post()メソッドを追加するサードパーティのライブラリを使用していない限り、文字列にはメソッドがありません。

于 2013-10-20T22:36:08.420 に答える
1

JavaScript のスコープについて読むことをお勧めします。あなたがやろうとしていることについてこれ以上説明がなければ、私はこのパターンのようなものを試してみます...

var app = {
  baseapi: 'http://some.url.com'

  /* assuming the api user/pass are different form the account trying to log in */
  ,api_username: ''
  ,api_key: ''

  ,username: ''
  ,userpass: ''

  ,get_creditialString: function() {
    return '?api_username=' + this.api_username + '&api_key=' + this.api_key;
  }
  ,init: function(){    
    // do something to prompt for username and password
    this.username = 'myUserName';
    this.userpass = 'supersecretpassword';

    this.login();
  }
  ,login: function() {
    var calledUrl = this.baseapi + "user/login/" + this.get_credentialString();
    calledUrl.post(
        function (content) {
            /*console.log("success" + JSON.stringify(content, null, 4));*/
        },
        function (e) {
            console.log("it failed! -> " + e);
        },
        {
            "username": this.username,
            "password": this.userpass
        },
        {"Accept" : "application/json"}
    );
  }
}
app.init();
于 2013-10-20T22:40:26.150 に答える