来自适配器的 Torii 提供商名称?
Torii provider name from adapter?
我有一个 Torii 适配器 post 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)。我试图为所有包含通用功能的适配器创建一个父 class。回到绘图板...
更新 3: 正如@Brou 指出的那样,并且我在与 Torii 团队交谈时了解到,无论提供者如何,都可以在一个通用应用程序适配器 (app-name/torii-adapters/application.js
) 文件。如果您需要特定于提供者的会话打开逻辑,您可以有多个额外的适配器(例如 app-name/torii-adapters/facebook-oauth2.js
),它们可以子class 应用程序适配器(或不)。
关于 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 我的发现和解决方案。它封装了我最初 post、@brou 和其他来源的一些想法。如果您有任何问题,请在评论中告诉我。谢谢。
我不是专家,但我在过去几周研究了 simple-auth
和 torii
两次。首先,我意识到我需要同时升级太多东西,并最终延迟了我的登录功能。今天,我回到这项工作了一个星期。
我的问题是:你的具体逻辑是什么?
我也在实施提供商不可知的处理和以后的通用处理。
这是我开始实施的流程:
- 用户身份验证.
基本上,调用 torii
默认提供程序来获取 OAuth2 令牌。
- 用户信息检索.
从 FB/GG/LI API 获取规范信息,以便为跨不同提供商的单个用户创建尽可能少的会话。 这因此API-不可知。
➜ 然后我会做: 自定义子提供者调用 this._super()
,然后进行检索。
- 用户 会话获取 或 会话更新 通过我的 API.
使用以前的规范用户信息。 此 对任何提供商都应该相同。
➜ 然后我会做: 一个 (application.js
) torii 适配器。
- 用户会话持久性反对页面刷新。
理论上,使用simple-auth
的session实现就够了。
也许我们的作品之间的唯一区别是我暂时不需要任何授权人,因为我的后端尚未得到保护(我仍然 运行 本地)。
我们可以随时了解各自的进展情况:这是我的每周任务,所以不要犹豫!
我正在与 ember 1.13
.
合作
希望对您有所帮助,
享受编码! 8-)
我有一个 Torii 适配器 post 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)。我试图为所有包含通用功能的适配器创建一个父 class。回到绘图板...
更新 3: 正如@Brou 指出的那样,并且我在与 Torii 团队交谈时了解到,无论提供者如何,都可以在一个通用应用程序适配器 (app-name/torii-adapters/application.js
) 文件。如果您需要特定于提供者的会话打开逻辑,您可以有多个额外的适配器(例如 app-name/torii-adapters/facebook-oauth2.js
),它们可以子class 应用程序适配器(或不)。
关于 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 我的发现和解决方案。它封装了我最初 post、@brou 和其他来源的一些想法。如果您有任何问题,请在评论中告诉我。谢谢。
我不是专家,但我在过去几周研究了 simple-auth
和 torii
两次。首先,我意识到我需要同时升级太多东西,并最终延迟了我的登录功能。今天,我回到这项工作了一个星期。
我的问题是:你的具体逻辑是什么?
我也在实施提供商不可知的处理和以后的通用处理。
这是我开始实施的流程:
- 用户身份验证.
基本上,调用torii
默认提供程序来获取 OAuth2 令牌。 - 用户信息检索.
从 FB/GG/LI API 获取规范信息,以便为跨不同提供商的单个用户创建尽可能少的会话。 这因此API-不可知。
➜ 然后我会做: 自定义子提供者调用this._super()
,然后进行检索。 - 用户 会话获取 或 会话更新 通过我的 API.
使用以前的规范用户信息。 此 对任何提供商都应该相同。
➜ 然后我会做: 一个 (application.js
) torii 适配器。 - 用户会话持久性反对页面刷新。
理论上,使用simple-auth
的session实现就够了。
也许我们的作品之间的唯一区别是我暂时不需要任何授权人,因为我的后端尚未得到保护(我仍然 运行 本地)。
我们可以随时了解各自的进展情况:这是我的每周任务,所以不要犹豫!
我正在与 ember 1.13
.
希望对您有所帮助,
享受编码! 8-)