首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自适配器的Torii提供者名称?

来自适配器的Torii提供者名称?
EN

Stack Overflow用户
提问于 2015-09-01 16:16:32
回答 1查看 330关注 0票数 2

我有一个Torii适配器,它将我的(例如Facebook和Twitter )授权令牌发回我的API来建立会话。在我的适配器的open()方法中,我想知道提供程序的名称,以编写一些关于如何处理不同类型的提供程序的逻辑。例如:

代码语言:javascript
复制
// 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是不正确的。是否有方法从适配器方法中获取使用的提供程序的名称?提前谢谢。

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

代码语言:javascript
复制
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适配器下找到不同的适配器(例如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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 09:04:49

我不是专家,但在过去的几周里我学过两次simple-authtorii。首先,我意识到我需要同时处理太多的事情,最后延迟了我的登录功能。今天,我要做一周的工作。

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

我也正在实现与提供者无关的处理和稍后的通用处理。

--这是我开始实现的过程:

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

也许我们之间的唯一不同之处是,我暂时不需要任何授权人,因为我的后端还没有被保护(我仍然在本地运行)。

我们可以就各自的进展保持联系:这是我的一周任务,所以不要犹豫!

我和恩伯1.13一起工作。

希望能帮上忙

享受编码!8-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32336414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档