3

Torii で github-oauth2 プロバイダーを使用しようとしていますが、いくつかのコールバックを設定する方法に困惑しています。私が使用しているコードとそれに対する私の理解をトレースします。うまくいけば、どこが間違っているのかを特定するのに役立ちます。

まず、私のアクションで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 サーバー用です。私のgithubアプリには同じredirectUri設定があるので、それらは一致します。

これが私のサーバーにあるものです。これが問題の場所である可能性が高いです。最後に症状について説明します。

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 ページに移動します。

ここに画像の説明を入力

残念ながら、私が望んでいたのは、鳥居のポップアップが消えて、アプリaccess_tokenthen.

どこが間違っていますか?

4

1 に答える 1

5

これを解決し、ソリューションを実装したアプリ ( gitzoom ) にコードを共有してくれた Kevin Pfefferle に感謝します。

したがって、最初の修正は、 my をクリアredirectUriし、github で に設定することlocalhost:4200です。これにより、リダイレクト先の Ember アプリになるようにアプリがリダイレクトされます。

2 番目の修正は、カスタム torii プロバイダーを作成することでした。

//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')
})

それでは、行きましょう!うまくいけば、これは将来立ち往生している他の人々に役立ちます.

于 2016-05-16T21:16:54.580 に答える