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