2016-05-16 5 views
3

私は鳥居でgithub-oauth2プロバイダを使用しようとしていますが、私はコールバックの一部をどのようにセットアップするべきかについては困惑しています。私が使用しているコードと、それを理解していることをトレースし、うまくいけばどこが間違っているのかを特定するのに役立ちます。Ember.jsとTorii(oauth2)でgithubに接続

まず、それがドキュメントで行うことを言うように自分の行動に、私は鳥居のopenメソッドを呼んでいる:

:もちろん、私は私の config/environment.jsで次のセットアップを持って、

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

をと

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としてパッケージ化します。

この結果は、鳥居のポップアップがレールのページに行くことです:

enter image description here

鳥居のポップアップが消えるのを残念ながら、私が望んでいたことだった、私のアプリaccess_tokenを与え、私のthenブロックのコードを実行してコードを実行する

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

答えて

5

私はこの問題を解決するのを手伝ってくれたKevin Pfefferleに心から感謝し、ソリューションを実装した彼のアプリ(gitzoom)にコードを共有しました。

最初の解決策は私のredirectUriをクリアし、それをgithubに設定してlocalhost:4200にすることです。これにより、アプリケーションがリダイレクトされ、Emberアプリにリダイレクトされるようになりました。

秒修正がなぜこのthenトリガ

//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は前にしませんでした。とにかく、それはデータを取得し、それを返し、私は前に使用していた約束は、データを正しく取得します。

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

だから私たちは行く!うまくいけば、これは将来取り残されている他の人々に役立ちます。

関連する問題