我有一个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-auth
和torii
两次。首先,我意识到我需要同时升级太多东西,最终导致我的登录功能延迟。今天,我将继续一周的工作。
我的问题是:您的具体逻辑是什么?
我还将实现与提供商无关的处理以及以后的通用处理。
这是我开始执行的过程:
用户认证。
基本上,调用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/