在Ember简单验证中处理多个帐户

时间:2016-02-02 23:22:39

标签: ember.js ember-simple-auth

我正在使用Ember 2.3和Ember Simple Auth 1.0,我想知道是否有人对处理以下情况的最佳方法有任何建议:

对于我的平台所服务的特定行业,大多数员工实际上是独立承包商,因此可能属于多个业务。话虽如此,我有一些具体的要求,我正在努力解决:

  • 避免为工作人员所属的每个业务创建一个单独的凭据和单独的凭据。
  • 允许特定帐户随时撤消凭据。
  • 允许帐户级权限。
  • 简化从应用程序内部切换帐户,而无需完全重新验证。

为实现这一目标,我的初始实现基于为每个用户帐户发布一个JWT(使用ember-simple-auth-token)。建议的认证流程如下:

  1. 用户使用用户名和密码登录
  2. 系统进行身份验证,如果凭据有效,则为每个帐户返回一个令牌。
    • 如果系统没有返回令牌,则返回错误。
    • 如果系统返回单个令牌,请默认使用该令牌并重定向到站点的经过身份验证的区域。
    • 如果系统返回多个令牌,则显示与这些令牌关联的帐户列表,并允许用户选择他们将在此时担任角色的帐户。
  3. 当系统返回多个令牌时该怎么办才有问题:

    • 是否有办法“拦截”以允许用户在ESA将令牌提交到本地存储中的会话之前选择使用哪个帐户/令牌?
    • 如果我希望用户能够切换帐户,是否只需在本地存储中交换令牌值?

    如果还有什么我应该考虑的,我会很感激反馈。如果你碰巧认为这是一种可怕的方法并有一些反馈,我绝对会喜欢它。

    干杯。

1 个答案:

答案 0 :(得分:3)

从ESA的角度来看,当后端用一个或多个令牌响应时,用户将被验证(当然,您必须实现自定义验证器和授权器)。会话实际上包含多个帐户的多个令牌这一事实与ESA无关 - 这将是......您需要在应用程序代码中处理。

使用一个或多个令牌对会话进行身份验证后,您可以通过会话的data.authenticated属性访问它们,例如this.get('session.data.authenticated.tokens')等。您可以在会话的非验证区域中存储用户想要使用的当前活动帐户,例如this.get('session.data').set('activeToken', 'whatever')