我有一个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是不正确的。是否有方法从适配器方法中获取使用的提供程序的名称?提前谢谢。
更新:我认为有几种方法可以做到这一点。第一种方法是在调用localStorage (或sessionStorage)之前在open()中设置提供者名称,然后在上面的逻辑中使用该值。例如:
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,和其他来源。如果您有任何问题,请在评论中告诉我。谢谢。
发布于 2015-09-09 09:04:49
我不是专家,但在过去的几周里我学过两次simple-auth和torii。首先,我意识到我需要同时处理太多的事情,最后延迟了我的登录功能。今天,我要做一周的工作。
我的问题是:,你的具体逻辑是什么?
我也正在实现与提供者无关的处理和稍后的通用处理。
--这是我开始实现的过程:
torii默认提供程序来获取OAuth2令牌。this._super(),然后执行此检索。application.js) torii适配器。simple-auth的会话实现就足够了。也许我们之间的唯一不同之处是,我暂时不需要任何授权人,因为我的后端还没有被保护(我仍然在本地运行)。
我们可以就各自的进展保持联系:这是我的一周任务,所以不要犹豫!
我和恩伯1.13一起工作。
希望能帮上忙
享受编码!8-)
https://stackoverflow.com/questions/32336414
复制相似问题