我正在使用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 中。之后,我创建并显示另一个视图 ( viewport.js ),它使用令牌来访问 API:
store: {
//...
proxy: {
//...
url: 'http://mydomain.com/api/controller/function/?token=' + localStorage.getItem('myToken')
}
}
在那一刻,网址看起来像这样:
http://mydomain.com/api/controller/function/?token=null&...
但是当我刷新浏览器时,一切都很好,令牌又回来了:
http://mydomain.com/api/controller/function/?token=tokenValue&...
我也可以完全关闭我的浏览器,再次打开它并访问我的整个应用程序而无需登录。