我正在尝试在我的EmberJS应用程序中检测一段时间的用户不活动状态,以便在一定时间后可以调用session.inValidate
方法并撤消其身份验证。
我唯一能找到的资源是一篇文章here,在an original question中被告知我已经过时,并且没有使用当前的Ember概念。
过时的文章建议将属性添加到App
对象,并在某些事件(例如mousemove
)上更新该属性,但是我无法在任何一个位置找到正确设置此属性的位置app.js
或配置环境。
ember-concurrency,但是在阅读了一些文档之后,我仍然不明白此类代码在EmberJS应用程序结构中的适合位置。
不幸的是,在给出代码示例之前,我陷入了困境。任何建议表示赞赏。
编辑:根据@hernanvicente的一个很好的问题,我将不活动定义为“无用户输入”。因此在X期间内没有mousemove
或key press
事件
答案 0 :(得分:3)
这里的难题是 activity 的实际含义。通常,我会建议您反对。无法知道用户是否仍在浏览您的页面。
但是,如果您确实想在用户一段时间未执行某事之后执行某事,那么有趣的问题是将代码放置在何处。
>您在这里有多个选项,但可能不是最糟糕的选择是使用应用程序控制器。您也可以使用服务,但随后需要在某处使用该服务对其进行初始化。您也可以也只使用一个组件。
如果要将其与身份验证结合使用,则可以考虑使用现有的session
服务。
但是,其他所有内容并非真正针对余烬。您可以将一些代码放在应用程序控制器init
的钩子中并访问document.addEventListener()
。然后,您可以保存时间戳记并采取相应的措施。
要想拥有一个更好的 waiting API,您可以将ember-concurrency
与restartable
任务结合使用:
didSomething: task(function * () {
yield timeout(1000); // number of miliseconds to wait
logout();
}).restartable(),
在1秒钟未调用任务后,将在此处调用logout()
。关于task concurrency and restarable
can be found here的漂亮视觉演示。