Как пройти аутентификацию на Twitter с помощью Ember Torii и Ember Simple Auth

Я пытаюсь пройти аутентификацию на Twitter, используя Ember Torii и Ember Simple Auth. Однако я не уверен, как правильно закрыть всплывающее окно аутентификации после того, как пользователь прошел аутентификацию. Мой код:

//app/authenticators/torii.js
import {inject as service} from '@ember/service';
import Torii from 'ember-simple-auth/authenticators/torii';

export default Torii.extend({
  torii: service(),
  ajax: service(),

  authenticate() {
    const ajax = this.get('ajax');
    return this._super(...arguments).then((data) => {
      console.log('Authorization data:');
       console.log(data);
      if(data.provider === "twitter" && data.code) {
        return {
          accessToken: data.code,
          provider: data.provider
        };
      }
      //This is for OAuth2 providers e.g. Facebook
      return ajax.request(
        'http://localhost:8080/api/1/auth', {
        type: 'POST',
        dataType: 'json',
        crossDomain: true,
        contentType: 'application/json',
        data: {'provider': data.provider, 'authorizationCode': data.authorizationCode}
      }).then((response) => {
        return {
          accessToken: response.token,
          provider: data.provider
        };
      });
    });
  }
});


  //config/environment.js
  .......
  providers: {
    'facebook-oauth2': {
      apiKey: 'xxxxxxxxxxxxxx',
      scope: 'public_profile,email'
    },
    'twitter': {
      requestTokenUri: 'http://localhost:8080/api/1/auth/twitter/'
    },

//app/torii-providers/facebook-oauth2.js
import { computed } from '@ember/object';
import FacebookOauth2Provider from 'torii/providers/facebook-oauth2';

export default FacebookOauth2Provider.extend({
  redirectUri: computed(function() {
    return [
      window.location.protocol,
      '//',
      window.location.host,
      '/torii/redirect.html'
    ].join('');
}),

  fetch(data) {
    return data;
  }
});

Насколько я понимаю, в случае аутентификации с помощью Twitter происходит следующее:

  1. Пользователь нажимает на элемент пользовательского интерфейса, чтобы инициировать поток аутентификации. Ember Torii создает всплывающее окно и выполняет запрос GET requestTokenUri, API-интерфейс генерирует oauth_token требуется Twitter и перенаправляет на страницу входа в Twitter с oauth_token в качестве параметра запроса.
  2. Пользователь входит в систему. При успешном входе в систему Twitter перенаправляет всплывающее окно браузера на настроенный Callback URL на API-интерфейсе вместе с oauth_token а также oauth_verifier параметры.
  3. Бэкэнд API Callback URL получает эти параметры и обменивает их oauth_token а также oauth_token_secret которые хранятся в фоновом режиме.

Мой вопрос в основном, что происходит дальше и как правильно и безопасно закрыть всплывающее окно и инициализировать сеанс:

Мой бэкэнд преобразует токен, сгенерированный в 3 выше, во внутренний токен JWT и перенаправляет всплывающее окно браузера torii/redirect.html?code=<<JWTTOKEN>>, Однако, когда всплывающее окно браузера закрывается, Torii пытается повторно аутентифицировать данный токен, вызывая метод authenticate, который не требуется. Я сделал обходной путь, как показано выше в app/authenticators/torii.js, Это правильно? Есть ли способ лучше?

0 ответов

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