Ember Octane 如何转换自定义 mixins
Ember Octane How to convert custom mixins
此问题与: Mixins 在 Ember Octane 中正式弃用。
问题:
替换 Ember 混入的最佳选择是什么?我该如何实现它?
上下文:
我有自定义 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
选项:
- 纯原生 classes,通过 class 继承共享功能。
- 可以在多个 class 中导入和使用的实用函数。
- 可注入多个class的服务,共享
它们之间的功能和状态。
我有以下身份验证混合:
- Application Route: 这处理用户是否登录以及用户是否启用双因素身份验证(2FA),如果启用,它验证用户已通过 2FA 验证。这是因为简单身份验证在开发 mixin 时没有提供 2FA
- 经过身份验证的路由: 确保用户已登录。如果他们未登录,则用户将被路由到登录页面。一旦他们登录,他们将被路由回他们最初尝试去的页面
- UnAuthenticated Route: 防止登录用户进入某些登录用户不应进入的路由
首先,我想非常清楚地表明 Ember 中的混入不是 "officially deprecated",据我所知,甚至没有 active RFC about it. As the Upgrade Guides 解释,Glimmer 组件不支持混入,因为不扩展 EmberObject,但预先存在的框架 类(路由、控制器等)必然必须扩展,否则将是一个重大变化。
没有替换 mixins 的最佳选择,因为它取决于 API 的用法。如果你问如何替换 ember-simple-auth mixins,我的回答是你不能,直到插件本身提供替代 APIs。 Mixins 和您发布的示例代码将在可预见的未来继续工作。
您可以看到 using class inheritance to share functionality in this PR.
的示例
当我迁移到 ember Octane 时,我试图替换 ember-simple-auth mixins,我发现这比重写我自己的身份验证服务要花费我很多时间,我在这玩意儿,我在用 cookies,Auth service
如果您不使用 cookie,您可以自定义您的适配器以在 headers
中包含一个令牌
我在 Git 上与 ESA 打交道,我在 OP 中引用的同一个问题已被关闭,新问题随后被合并:
https://github.com/simplabs/ember-simple-auth/pull/2198
ESA 现在更新了他们的库以摆脱路由混合。
此问题与:
问题:
替换 Ember 混入的最佳选择是什么?我该如何实现它?
上下文:
我有自定义 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
选项:
- 纯原生 classes,通过 class 继承共享功能。
- 可以在多个 class 中导入和使用的实用函数。
- 可注入多个class的服务,共享 它们之间的功能和状态。
我有以下身份验证混合:
- Application Route: 这处理用户是否登录以及用户是否启用双因素身份验证(2FA),如果启用,它验证用户已通过 2FA 验证。这是因为简单身份验证在开发 mixin 时没有提供 2FA
- 经过身份验证的路由: 确保用户已登录。如果他们未登录,则用户将被路由到登录页面。一旦他们登录,他们将被路由回他们最初尝试去的页面
- UnAuthenticated Route: 防止登录用户进入某些登录用户不应进入的路由
首先,我想非常清楚地表明 Ember 中的混入不是 "officially deprecated",据我所知,甚至没有 active RFC about it. As the Upgrade Guides 解释,Glimmer 组件不支持混入,因为不扩展 EmberObject,但预先存在的框架 类(路由、控制器等)必然必须扩展,否则将是一个重大变化。
没有替换 mixins 的最佳选择,因为它取决于 API 的用法。如果你问如何替换 ember-simple-auth mixins,我的回答是你不能,直到插件本身提供替代 APIs。 Mixins 和您发布的示例代码将在可预见的未来继续工作。
您可以看到 using class inheritance to share functionality in this PR.
当我迁移到 ember Octane 时,我试图替换 ember-simple-auth mixins,我发现这比重写我自己的身份验证服务要花费我很多时间,我在这玩意儿,我在用 cookies,Auth service 如果您不使用 cookie,您可以自定义您的适配器以在 headers
中包含一个令牌我在 Git 上与 ESA 打交道,我在 OP 中引用的同一个问题已被关闭,新问题随后被合并:
https://github.com/simplabs/ember-simple-auth/pull/2198
ESA 现在更新了他们的库以摆脱路由混合。