Имя провайдера Torii из адаптера?
У меня есть адаптер 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') {
// ...
}
Другой способ - создать отдельные адаптеры для разных поставщиков. В Тории есть код для поиска, например 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
), который может быть подклассом адаптера приложения (или нет).
Относительно жизненного цикла сеанса в Тории: https://github.com/Vestorly/torii/issues/219
Относительно шаблона нескольких адаптеров: https://github.com/Vestorly/torii/issues/221
По поводу нового authenticatedRoute()
DSL и автоматическая выборка в Torii 0.6.0: https://github.com/Vestorly/torii/issues/222
ОБНОВЛЕНИЕ 4: я написал свои выводы и решение на моем личном веб-сайте. Он включает в себя некоторые идеи из моего первоначального поста, из @brou и других источников. Пожалуйста, дайте мне знать в комментариях, если у вас есть какие-либо вопросы. Спасибо.
1 ответ
Я не эксперт, но я учился simple-auth
а также torii
дважды за последние недели. Во-первых, я понял, что мне нужно повысить уровень одновременно до нескольких вещей, и закончил тем, что отложил свою регистрацию. Сегодня я вернулся на эту работу на неделю.
Мой вопрос: в чем ваша конкретная логика?
Я также внедряю обработку, независимую от провайдера, и, позже, общую обработку.
Это процесс, который я начинаю реализовывать:
- Аутентификация пользователя.
В основном, звонитtorii
провайдеры по умолчанию, чтобы получить этот токен OAuth2. - Поиск информации о пользователе.
Получение канонической информации из API FB/GG/LI, чтобы создать как можно меньше сеансов для одного пользователя с разными провайдерами. Таким образом, это API-агнотик.
➜ Я бы тогда делал: звонил пользовательский суб-провайдерthis._super()
, а затем делать этот поиск. - Выборка сеанса пользователя или обновления сеанса через мой API.
Используя предыдущую каноническую информацию о пользователе. Это должно быть то же самое для любого поставщика.
➜ Я бы тогда сделал: один (application.js
) адаптер тории. - Постоянство сеанса пользователя против обновления страницы.
Теоретически, используяsimple-auth
Реализация сессии достаточно.
Возможно, единственное различие между нашими работами в том, что на данный момент мне не нужен никакой авторизатор, так как мой бэкэнд еще не защищен (я все еще работаю локально).
Мы можем быть в курсе нашего прогресса: это моя недельная задача, так что не стесняйтесь!
Я работаю с Ember 1.13
,
Надеюсь, это помогло,
Наслаждайтесь кодированием! 8-)