我有一个Torii适配器正在发布我的例如Facebook和Twitter授权令牌返回我的API以建立会话。在适配器的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。我将特定于提供程序的逻辑放在单独的文件中,这将达到目的。但是,我具有用于存储,获取和关闭会话的通用逻辑,因此我不确定现在将其放在何处。

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

更新3:正如@Brou所指出的,正如我与Torii团队所学的一样,无论使用哪种提供程序,都可以在通用应用程序适配器(app-name/torii-adapters/application.js)文件中完成会话的获取和关闭。如果需要特定于提供程序的会话打开逻辑,则可以有多个其他适配器(例如app-name/torii-adapters/facebook-oauth2.js),它们可以子类化应用程序适配器(也可以不是)。

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

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

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

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

最佳答案

我不是专家,但是在过去的几周中,我已经学习过simple-authtorii两次。首先,我意识到我需要同时升级太多东西,最终导致我的登录功能延迟。今天,我将继续一周的工作。

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

我还将实现与提供商无关的处理以及以后的通用处理。

这是我开始执行的过程:


用户认证。
基本上,调用torii默认提供程序以获取该OAuth2令牌。
用户信息检索。
从FB / GG / LI API获取规范信息,以便为跨不同提供程序的单个用户创建尽可能少的会话。因此,这与API无关。
then然后我要做:调用this._super()的自定义子提供商,然后进行此检索。
通过我的API获取用户会话或会话更新。
使用先前的规范用户信息。对于任何提供者,这应该是相同的。
then然后我要做:一个(application.js)torii适配器。
用户会话对页面刷新的持久性。
从理论上讲,使用simple-auth的会话实现就足够了。


也许我们作品之间的唯一区别是我目前不需要任何授权人,因为我的后端尚未固定(我仍在本地运行)。

我们可以保持联系,以了解各自的进展情况:这是我每周的任务,请不要犹豫!
我正在使用余烬1.13

希望能有所帮助,
享受编码! 8)

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

10-12 15:18