Имя провайдера 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 дважды за последние недели. Во-первых, я понял, что мне нужно повысить уровень одновременно до нескольких вещей, и закончил тем, что отложил свою регистрацию. Сегодня я вернулся на эту работу на неделю.

Мой вопрос: в чем ваша конкретная логика?

Я также внедряю обработку, независимую от провайдера, и, позже, общую обработку.

Это процесс, который я начинаю реализовывать:

  1. Аутентификация пользователя.
    В основном, звонит torii провайдеры по умолчанию, чтобы получить этот токен OAuth2.
  2. Поиск информации о пользователе.
    Получение канонической информации из API FB/GG/LI, чтобы создать как можно меньше сеансов для одного пользователя с разными провайдерами. Таким образом, это API-агнотик.
    Я бы тогда делал: звонил пользовательский суб-провайдер this._super(), а затем делать этот поиск.
  3. Выборка сеанса пользователя или обновления сеанса через мой API.
    Используя предыдущую каноническую информацию о пользователе. Это должно быть то же самое для любого поставщика.
    Я бы тогда сделал: один (application.js) адаптер тории.
  4. Постоянство сеанса пользователя против обновления страницы.
    Теоретически, используя simple-authРеализация сессии достаточно.

Возможно, единственное различие между нашими работами в том, что на данный момент мне не нужен никакой авторизатор, так как мой бэкэнд еще не защищен (я все еще работаю локально).

Мы можем быть в курсе нашего прогресса: это моя недельная задача, так что не стесняйтесь!
Я работаю с Ember 1.13,

Надеюсь, это помогло,
Наслаждайтесь кодированием! 8-)

Другие вопросы по тегам