在由(现在有点删除)问题彼得Kniestedt他想知道在哪里以及如何设置一个计时器来检查用户的认证。
他的问题是一个更大的问题(这是这个问题的标题)的一部分。 因为我觉得这是很重要的,这个问题的答案,我创建了一个新的问题,以此来收集所有重要信息存放在一个地方。
在由(现在有点删除)问题彼得Kniestedt他想知道在哪里以及如何设置一个计时器来检查用户的认证。
他的问题是一个更大的问题(这是这个问题的标题)的一部分。 因为我觉得这是很重要的,这个问题的答案,我创建了一个新的问题,以此来收集所有重要信息存放在一个地方。
这是使用状态图的一个典型的情况下,更具体地并发状态。
如果你还不知道,SproutCore的包含了一个名为SC.Statechart一个非常有用的库,它是应用程序状态的方式是不是通过使用布尔性质更可控,处理的方式,因为它也就像一个应答器以及控制器。
在这种情况下,你会希望这根有两个并行状态的状态图:一个对付周围的认证状态,和一个处理应用程序的其余部分。
MyApp.statechart = SC.Statechart.create({
rootState: SC.State.design({
substatesAreConcurrent: true,
AUTH: SC.State.design({
initialSubstate: 'CHECKAUTH',
CHECKAUTH: SC.State.design({
}),
LOGIN: SC.State.design({
}),
AUTHENTICATING: SC.State.design({
}),
AUTHENTICATED: SC.State.design({
}),
}),
APPMAIN: SC.State.design({
})
})
});
这是如何工作的:当你的应用程序启动时,它会去两个国家一次,一个是APPMAIN状态,这是应用程序本身交易的状态。 另一种是AUTH状态,这将立即转至初始子状态CHECKAUTH,检查用户是否具有有效的会话。 如果没有,这种状态应该进入登录状态,这是负责显示登录屏幕。 然后,当用户执行登录,登录状态转移到认证的状态,它执行服务器检查。 如果这个尝试是无效或不正确,认证国家应该过渡到登录,否则认证。
要回答这个问题是基于原来的问题:如果你需要一个计时器的地方,定期检查认证是否仍然有效,它应该是在认证状态。 如果它会失败,你可以立即转换到登录状态,显示登录界面。
使用这样的状态图表防止不必重新加载或者为了退出应用程序重新登录,并且可能会丢失数据,结果给用户。 总之它使一个更好的用户体验。