【问题标题】:Handling Multiple Accounts in Ember Simple Auth在 Ember 简单身份验证中处理多个帐户
【发布时间】:2016-02-02 23:22:38
【问题描述】:

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

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

  • 避免必须为员工所属的每个企业创建具有单独凭据的单独帐户。
  • 允许随时撤销特定帐户的凭据。
  • 允许帐户级权限。
  • 让从应用程序内部切换帐户变得简单,而无需完全重新验证。

为了实现这一点,我最初的实现是基于为每个用户帐户发布一个 JWT(使用 ember-simple-auth-token)。建议的身份验证流程如下:

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

当系统返回多个令牌时该怎么办是我有疑问的地方:

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

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

干杯。

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!这现在更有意义了。非常感谢您的反馈并首先创建 ESA!
    • 我在尝试实现此功能时注意到的一件事是,在成功进行身份验证后,应用程序会在我的自定义授权方调用 authorize 方法之前转换到 routeAfterAuthentication 路由。因此,我在该路线上进行的任何 ember-data 调用都无法使用已设置的令牌。你觉得这听起来对吗?
    • 取消之前的评论。我最终弄清楚了这个问题。干杯!
    • 最后一个问题:您提到将当前活动的帐户存储在会话的未验证区域中。有什么特别的原因吗?
    • 实际上,这不是我的最后一个问题 :) 我正在尝试覆盖 restore() 方法以便能够恢复会话。我刚刚意识到,当我设置activeAccount 时,它不会持续到localStorage。除了直接访问之外,还有其他推荐的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多