javascript - 来自适配器的 Torii 提供商名称?

标签 javascript ember.js ember-cli torii

我有一个 Torii 适配器正在发布我的示例。 Facebook 和 Twitter 授权 token 返回到我的 API 以建立 session 。在我的适配器的 open() 方法中,我想知道提供者的名称,以便围绕如何处理不同类型的提供者编写一些逻辑。例如:

// app/torii-adapters/application.js
export default Ember.Object.extend({
  open(authorization) {
    if (this.provider.name === 'facebook-connect') {
      var provider = 'facebook';
      // Facebook specific logic
      var data = { ... };
    }
    else if (this.provider.name === 'twitter-oauth2') {
      var provider = 'twitter';
      // Twitter specific logic
      var data = { ... };
    }
    else {
      throw new Error(`Unable to handle unknown provider: ${this.provider.name}`);
    }

    return POST(`/api/auth/${provider}`, data);
  }
}

但是,this.provider.name 当然是不正确的。有没有办法从适配器方法中获取提供者的名称?提前致谢。

更新:我认为有几种方法可以做到这一点。第一种方法是在调用 open() 之前在 localStorage(或 sessionStorage)中设置提供者名称,然后在上述逻辑中使用该值。例如:

localStorage.setItem('providerName', 'facebook-connect');
this.get('session').open('facebook-connect');

// later ...

const providerName = localStorage.getItem('providerName');
if (providerName === 'facebook-connect') {
  // ...
}

另一种方法是为不同的提供者创建单独的适配器。 Torii 中有代码可以查找例如app-name/torii-adapters/facebook-connect.js 在回到 app-name/torii-adapters/application.js 之前。我会将特定于提供者的逻辑放在单独的文件中,这样就可以了。但是,我有存储、获取和关闭 session 的通用逻辑,所以我不确定现在该把它放在哪里。

更新 2:Torii 无法在 torii-adapters 下找到不同的适配器(例如 facebook-connect.js、twitter-oauth2.js)。我试图为所有包含通用功能的适配器创建一个父类。回到绘图板...

更新 3:正如@Brou 指出的,以及我在与 Torii 团队交谈时了解到的,无论提供商如何,都可以在通用应用程序适配器中完成获取和关闭 session (app-name/torii-adapters/application.js) 文件。如果您需要特定于提供者的 session 打开逻辑,您可以有多个额外的适配器(例如 app-name/torii-adapters/facebook-oauth2.js),它们可以子类化应用程序适配器(或不是) .

关于 Torii 中的 session 生命周期:https://github.com/Vestorly/torii/issues/219

关于多适配器模式:https://github.com/Vestorly/torii/issues/221

关于 Torii 0.6.0 中新的 authenticatedRoute() DSL 和自动 session 获取:https://github.com/Vestorly/torii/issues/222

更新 4: 我有 written up我在个人网站上的发现和解决方案。它封装了我的原始帖子、@brou 和其他来源的一些想法。如果您有任何问题,请在评论中告诉我。谢谢。

最佳答案

我不是专家,但我在过去几周研究了两次 simple-authtorii。首先,我意识到我需要同时升级太多东西,并最终延迟了我的登录功能。今天,我回到这项工作了一个星期。

我的问题是:你的具体逻辑是什么?

我还实现了提供者不可知的处理和后来的通用处理。

这是我开始实现的流程:

  1. 用户身份验证
    基本上,调用 torii 默认提供程序来获取 OAuth2 token 。
  2. 用户信息检索
    从 FB/GG/LI API 获取规范信息,以便为跨不同提供商的单个用户创建尽可能少的 session 。 This 因此与 API 无关。
    然后我会: 自定义子提供程序调用 this._super(),然后执行此检索。
  3. 用户通过我的 API session 获取 session 更新
    使用以前的规范用户信息。 对于任何提供商都应该是相同的。
    然后我会: 一个 (application.js) torii 适配器。
  4. 针对页面刷新的用户 session 持久性
    理论上,使用simple-auth的session实现即可。

也许我们的工作之间唯一的区别是我暂时不需要任何授权人,因为我的后端尚未得到保护(我仍然在本地运行)。

我们可以就各自的进展保持联系:这是我的每周任务,所以不要犹豫!
我正在使用 ember 1.13

希望对你有帮助,
享受编码! 8-)

关于javascript - 来自适配器的 Torii 提供商名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336414/

相关文章:

javascript - 下拉菜单悬停类未删除

javascript - Webstorm File Watchers 永远重复调用批处理文件

javascript - Ember.js:将参数传递给嵌套路由

javascript - 如何通过实时重新加载将西兰花插件添加到 ember-cli 应用程序?

ember.js - 我可以从注入(inject)的服务中获得计算属性吗?

javascript - 检查 radio 并且 addeventlistener 不起作用

javascript - 将 Ember 组件插入特定的 DOM 元素?

ember.js - 将负 isDirty 与禁用类连接

ajax - 无法在 ember 中使用 pushPayload

javascript - 如何在另一个 mixins 函数中使用 mixins 函数?