【问题标题】:Ember Octane How to convert custom mixinsEmber Octane 如何转换自定义 mixin
【发布时间】:2020-08-02 11:33:36
【问题描述】:

这个问题与:Does Ember Octane Route class support using mixins? Mixins 在 Ember Octane 中被正式弃用。

问题:

替换 Ember mixin 的最佳选择是什么?如何实现它?

上下文:

我有自定义 mixin 来扩展 ember-simple-auth (~v1.8.2) 提供的功能,在创建方法时它不可用(见下文)。我目前正在使用 ember-simple-auth 3.0.0 https://github.com/simplabs/ember-simple-auth。如您所见,在 github 上的文档中,他们似乎在 Ember Octane 上使用了自己的 mixin:

// my-engine/addon/routes/index.js
import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';

export default class IndexRoute extends Route.extend(AuthenticatedRouteMixin) {
  triggerAuthentication() {
    this.transitionToExternal('login');
  }
}

看来我不是唯一一个遇到这个问题的人,因为 Simple Auth 也不知道他们想要走哪条路线:https://github.com/simplabs/ember-simple-auth/issues/2185

选项:

  • 纯原生类,通过类继承共享功能。
  • 可以在多个类中导入和使用的实用函数。
  • 可以注入多个类的服务,共享 它们之间的功能和状态。

我有以下身份验证混合:

  1. Application Route: 处理用户是否登录以及用户是否开启了双因素认证(2FA),如果开启,则验证用户是否通过了2FA认证。这是因为 simple auth 在开发 mixin(s) 时没有提供 2FA
  2. Authenticated Route:确保用户已登录。如果他们未登录,则将用户路由到登录页面。登录后,他们会被引导回最初尝试访问的页面
  3. UnAuthenticated Route:防止已登录的用户前往某些已登录的用户不应前往的路线

【问题讨论】:

    标签: ember.js ember-simple-auth


    【解决方案1】:

    首先,我想非常清楚地表明,在 Ember 中,mixin 并未“正式弃用”,据我所知,甚至没有关于它的 active RFC。正如Upgrade Guides 解释的那样,由于没有扩展 EmberObject,Glimmer 组件不支持 mixins,但预先存在的框架类(Route、Controller 等)必须这样做,否则这将是一个重大变化。

    没有替代 mixins 的最佳选择,因为它取决于 API 的使用。如果您要问如何替换 ember-simple-auth mixins,我的回答是在插件本身提供替代 API 之前您不能。 Mixin 和您发布的示例代码将在可预见的未来继续工作。
    可以看using class inheritance to share functionality in this PR的例子。

    【讨论】:

    • 如果核心团队在引入 ESLINT 之前弄清楚如何处理 mixins 来表示没有新的 mixins,这会向世界传达“我们还没有弄清楚我们想要做什么” ”。来吧伙计们。
    【解决方案2】:

    当我迁移到 ember Octane 时,我尝试替换 ember-simple-auth mixins,我发现这比重写我自己的身份验证服务要花很多时间,我在这个 twiddle 中的示例,我正在使用 cookie,@987654321 @ 如果您不使用 cookie,则可以自定义适配器以在标头中包含令牌

    【讨论】:

      【解决方案3】:

      我在 Git 上用 ESA 转了回来,我在 OP 中引用的同一问题已被一个随后合并的新问题关闭:

      https://github.com/simplabs/ember-simple-auth/pull/2198

      ESA 现在更新了他们的库以摆脱路由混合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 2020-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多