在Ember.JS应用程序中强制执行用户/身份验证状态的最佳方法

Con*_*ham 37 authentication ember.js

在我的第一个EmberJS应用程序上工作.整个应用程序要求用户登录.我试图绕过最好的方法来强制用户现在登录(当页面最初加载时)和将来(当用户注销时)而且没有刷新).

我已经处理了用户身份验证挂钩 - 现在我有一个ember-data模型和连接该句柄的相关商店,授权用户并创建用户"session"(使用sessionStorage).

我不知道该怎么做是强制在跨路径转换时对用户进行身份验证,包括根路由中的初始转换.我把这个逻辑放在哪里?如果我有一个身份验证状态管理器,我该如何将其挂钩到路由?我应该有一条在根路由之外的身份验证路由吗?

注意:如果这个问题措辞不当或者我需要更好地解释,请告诉我,我很乐意这样做.

编辑: 我最终做了一些我认为更尴尬的事情,虽然可能是一个混乱的实现.我有一个auth statemanager,用于存储当前用户的身份验证密钥以及当前状态.

每当某些东西需要身份验证时,它只是向authmanager请求它并传递一个回调函数以使用身份验证密钥运行.如果用户未登录,则会提取登录表单,暂停回调功能,直到用户登录为止.

这是我正在使用的代码的一些选择部分.需要清理,我遗漏了一些东西.http://gist.github.com/3741751

tok*_*rev 8

如果需要在初始状态转换之前执行检查,则在Ember.Application类上有一个特殊函数deferReadiness().来自源代码的评论:

默认情况下,一旦浏览器发出DOMContentReady事件,路由器将开始尝试将当前URL转换为应用程序状态.如果需要延迟路由,可以调用应用程序的deferReadiness()方法.路由可以开始后,调用该advanceReadiness()方法.

请注意,在编写本文时,此功能仅在ember-latest中可用

  • 仅在最初加载页面时.IMO,在每次状态转换时检查身份验证的工作太多了.在我们的应用程序中,我们执行以下操作 - 在初始化时,我们检查用户是否经过身份验证,然后我们建立与服务器的持久连接.此连接的存在告诉我们用户已通过身份验证.如果由于某种原因,连接终止,则连接管理器将我们的应用程序转换为访客模式. (2认同)