1

Sencha Touch 2.0.0.RCを使用してモバイル Web アプリケーションを開発していますが、問題がこのフレームワークに関連しているとは思いません。

ワークフローは次のとおりです。

起動時にapp.jsが読み込まれ、ローカル ストレージにトークンが存在するかどうかがチェックされます。

launch: function() {
    if (localStorage.getItem('myToken')) {
        Ext.create('MyApp.view.Viewport');
    }
    else{
        Ext.create('MyApp.view.Login');
    }
}

初めてアプリケーションをロードするため、トークンが見つからないため、ログイン ビューが作成されます。

login.jsコントローラーでは、submitLoginForm関数がフォームの値を取得し、Ajax リクエストを REST API に送信します。

submitLoginForm: function () {
    var formValues = this.getLoginForm().getValues();

    Ext.Ajax.request({
        scope: this,
        url: 'http://mydomain.com/api/login/token',
        method: 'POST',
        params: formValues,
        success: function (response) {
            var result = Ext.JSON.decode(response.responseText);
            if (result.success) {
                localStorage.setItem('myToken', result.token);
                var viewport = Ext.create('MyApp.view.Viewport');
                this.getLoginForm().setHidden(true);
                viewport.show();
            }
            else{
                Ext.Msg.alert('Error', 'Bad username or password');
            }
        },
        failure: function () {
            // 
        }
    });
}

ユーザー名とパスワードが正しい場合、localStorage に保存するトークンが返されます。その後、トークンを使用して API にアクセスする別のビュー ( viewport.js ) を作成して表示します。

store: {
    //...
    proxy: {
        //...
        url: 'http://mydomain.com/api/controller/function/?token=' + localStorage.getItem('myToken')
    }
}

その時点で、URL は次のようになります。

http://mydomain.com/api/controller/function/?token=null&...

しかし、ブラウザを更新すると、すべて問題なく、トークンが戻ってきました。

http://mydomain.com/api/controller/function/?token=tokenValue&...

また、ブラウザを完全に閉じて再度開くと、ログインを求められることなくアプリケーション全体にアクセスできます。

4

2 に答える 2

1

この問題は、Sencha Touch に対する私の誤解に関連していました。私が説明したすべての前に呼び出される設定でストアを作成していました。mitchellsimoens は確かに適切な人物でした。彼は迅速に回答し、ビューの構成でストアを作成していることを自分で理解しました... http://www.sencha.com/forum/showthread.php?185690-localStorage-更新後のみアクセス可能

于 2012-03-07T22:36:46.373 に答える