【发布时间】:2014-02-15 02:09:39
【问题描述】:
正在开发我的第一个 EmberJS 应用程序。整个应用程序要求用户登录。我试图围绕强制用户现在(最初加载页面时)和将来(当用户注销时)登录的最佳方式并且没有刷新)。
我已经处理了用户身份验证钩子 - 现在我有一个 ember-data 模型和关联的存储连接,用于处理授权用户和创建用户“会话”(使用 sessionStorage)。
我不知道该怎么做是强制用户在跨路由转换时进行身份验证,包括根路由中的初始转换。我把这个逻辑放在哪里?如果我有一个身份验证状态管理器,我如何将它连接到路由中?我应该有根路由之外的身份验证路由吗?
注意:如果这个问题措辞不当或者我需要更好地解释什么,请告诉我,我很乐意这样做。
编辑: 我最终做了一些我认为更像 ember-esque 的事情,尽管可能是一个混乱的实现。我有一个身份验证状态管理器,它存储当前用户的身份验证密钥以及当前状态。
每当需要验证时,它都会简单地向 authmanager 请求它并传递一个回调函数以使用验证密钥运行。如果用户没有登录,它会拉出一个登录表单,在用户登录之前暂停回调函数。
这是我正在使用的部分代码。需要清理,我遗漏了一些东西。 http://gist.github.com/3741751
【问题讨论】:
-
在this fiddle中有一个认证状态的示例实现。
-
是的,我记得看到过这个,但我从来没有仔细研究过源代码,因为除了单击登录按钮时闪烁“登录/注销”之外,该示例似乎并没有做太多事情。 .try 未经授权不会做任何事情。从源代码来看,登录似乎应该列出新闻,但从来没有。我会更多地研究源代码,看看我是否可以使用这个例子。
-
也许您可以创建一个基本控制器来为您进行检查,并让您当前的控制器
extend它已经内置了该功能。同样,您可以拥有一个基本视图(绑定到某种“已验证”属性),您将extend到您当前的视图,因此您可以将模板更改为“您必须验证”类型的东西,如果用户未通过身份验证。至于 REST,一旦用户在服务器中通过身份验证,您可能希望实现一个 API 令牌来提供客户端应用程序,并且对于每个请求,发送并验证该令牌是真实的 -
@MilkyWayJoe 我想过。但是当我在路由中调用 connectOutlets 时,模型调用是在控制器启动之前进行的。就我而言,我在每个模型调用中发送一个 API 令牌,没有令牌 = 错误请求。我想我可以把它放在模型中,但是检查登录用户似乎有点晚了
-
我有同样的问题需要解决。除了上述解决方案之外,我还在考虑实施一种基本上独立于 Ember 应用程序本身的身份验证[不完全——这就是为什么它仍然是一个计划]。我之前使用过这样的 HTML5 服务器发送事件:boxed.hu/articles/html5-server-sent-events,并计划用于处理用户身份验证状态。到目前为止我还没有给它太多时间,但我会围绕它做一些测试。