2012-07-08 48 views
2

我创建一个应用程序ST2,您可以登录/注册等煎茶触摸2 - 登录用户状态

我想知道正常的方法是在记录的东西,并且具有在整个应用程序的用户状态。

我有一个带有REST代理的用户模型来获取/保存数据。当您加载应用程序,我这样做是为了抢夺用户:

launch: function() { 
    var User = Ext.ModelManager.getModel('App.model.User'); 
    User.load("", { 
     success: function (user) { 

      // I have the user here but it's only within this scope 

     } 
    }); 
} 

但这样做是唯一可用此功能中...所以什么人们通常得到阿霍德在整个用户的应用?只需将它存储在应用程序中,如:

application.user = user; 

还是你创建与用户的ID的商店,使用用户模型,然后用检索:

launch: function() { 
    var User = Ext.StoreManager.get('User'); 
    User.load(function(user) { 
     // Do application logged in stuff 
     self.getApplication().fireEvent('userLogsIn'); 
    }); 
} 

someRandomFunction: function() { 
    var user = Ext.StoreManager.get('User').getAt(0), 
     email = user.get('email'); 
     console.log(email); 
} 

感谢,多米尼克

+0

不清楚你想要什么......你问关于解决方案还是你想确认你的问题?我的意思是application.user = user ... – olegtaranenko 2012-07-08 20:34:08

+0

几乎只是问人们如何处理用户登录,然后在整个应用程序中保持该状态。由于AJAX调用已完成,我可以使用Ext.StoreManager.get('User')获取整个应用程序中的数据。但是当你做Ext.ModelManager.get('App.model.User')时,你需要每次加载它。那么通常做这件事的方法是什么?我正在考虑建立一个商店,但是当用户对象存储在一个用户数组中时,它就像是单一类型的模型一样没有意义。 – 2012-07-08 21:57:40

回答

1

一般来说,您不能依赖您在JS应用程序中本地保存的任何信息。它可以被欺骗和改变相对容易。

你需要做的是发送用户名/密码组合到你的服务器后端。然后,服务器应该返回加密的cookie,应用程序每发送一次请求就会发送回服务器。只有通过解密和验证这个cookie服务器才能确定登录用户的身份。

+0

好吧,我们使用的是Zend Framework/PHP,所以当第一次加载应用程序时,使用PHP会话ID从服务器获取用户对象。由于服务器在请求发出时检查会话ID,所以不是真正的问题。我想知道的是如何在不同的页面之间进行存储。我无法每次点击页面时都向用户提出请求,因为它看起来很慢。他们将无法做任何他们不应该做的事情,因为服务器会说用户没有登录,如果有的话 – 2012-07-09 09:05:13

+0

如果你不关心服务器端 - 只是在本地保存在你有权访问的某个全局变量中来自代码中的任何地方。 – sha 2012-07-09 11:13:18