Подключение к github с помощью Ember.js и Torii (oauth2)

Я пытаюсь использовать провайдера github-oauth2 в Torii, но я озадачен тем, как я должен настроить некоторые из обратных вызовов. Я прослежу код, который я использую, а также мое понимание этого, и, надеюсь, это поможет определить, где я ошибаюсь.

Во-первых, в своем действии я звоню Тории open метод, как говорится в документах:

this.get('torii').open('github-oauth2').then((data) => {
  this.transitionTo('dashboard')
})

И, конечно же, у меня есть следующие настройки в моем config/environment.js:

var ENV = {
  torii: {
    // a 'session' property will be injected on routes and controllers
    sessionServiceName: 'session',
    providers: {
      'github-oauth2': {
        apiKey:      'my key',
        redirectUri: 'http://127.0.0.1:3000/github_auth'
      }
    }
  },
}

RedirectUri для моего сервера Rails. У меня такая же настройка redirectUri в моем приложении github, поэтому они совпадают.

Вот что у меня на сервере. Вероятно, именно в этом проблема. Я доберусь до симптомов в конце.

def github
  client_id = 'my id'
  client_secret = 'my secret'
  code = params[:code]
  @result = HTTParty.post("https://github.com/login/oauth/access_token?client_id=#{client_id}&client_secret=#{client_secret}&code=#{code}")
  @access_token = @result.parsed_response.split('&')[0].split('=')[1]
  render json: {access_token: @access_token}  
end

Поэтому я отправляю сообщения в конечную точку github access_token, как и положено, и получаю результат с токеном доступа. Затем я упаковываю этот токен доступа как json.

В результате всплывающее окно torii переходит на страницу rails:

К сожалению, я надеялся, что всплывающее окно torii исчезнет, ​​и приложение будет access_tokenи для кода, чтобы двигаться дальше и выполнить код в моем then блок.

Куда я иду не так?

1 ответ

Большое спасибо Кевину Пфефферле, который помог мне решить эту проблему и поделился кодом со своим приложением ( gitzoom), где он реализовал решение.

Итак, первое исправление - очистить мой redirectUriи установить его на github, чтобы localhost:4200, Это сделало приложение перенаправленным так, чтобы это было приложение Ember, к которому оно перенаправлено.

Вторым исправлением было создание собственного провайдера тории.

//app/torii-providers/github.js
import Ember from 'ember';
import GitHubOauth2Provider from 'torii/providers/github-oauth2';

export default GitHubOauth2Provider.extend({
  ajax: Ember.inject.service(),
  fetch(data) {
    return data;
  },
  open() {
    return this._super().then((toriiData) => {
      const authCode = toriiData.authorizationCode;
      const serverUrl =  `/github_auth?code=${authCode}`;

      return this.get('ajax').request(serverUrl)
        .then((data) => {
          toriiData.accessToken = data.token;
          return toriiData;
        });
    });
  }
});

Не уверен, почему это then триггеры но then Я использовал раньше, не сделал. В любом случае, он захватывает данные и возвращает их, а затем обещание, которое я использовал прежде, получает данные правильно.

this.get('torii').open('github-oauth2').then((data) => {
  //do signon stuff with the data here
  this.transitionTo('dashboard')
})

Итак, поехали! Надеюсь, это поможет другим людям, которые застряли в будущем.

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