2016-05-16 12 views
3

Ich versuche, den Anbieter github-oauth2 in Torii zu verwenden, aber ich bin ratlos, wie ich einige der Rückrufe einstellen soll. Ich werde den Code, den ich verwende, sowie mein Verständnis davon verfolgen, und hoffentlich kann das helfen, herauszufinden, wo ich falsch liege.Verbinden mit GitHub mit Ember.js und Torii (oauth2)

Zuerst in meiner Aktion, ich rufe open Methode des Torii, wie er sagt, in der Dokumentation zu tun:

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

Und natürlich habe ich die folgende Einstellung in meinem config/environment.js haben:

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' 
     } 
    } 
    }, 
} 

Die redirectUri ist für meinen Rails-Server. Ich habe das gleiche RedirectUri Setup auf meiner GitHub-App, so dass sie übereinstimmen.

Hier ist, was ich auf meinem Server habe. Hier liegt wahrscheinlich das Problem. Ich werde am Ende zu den Symptomen kommen.

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 

So schreibe ich auf Github der access_token Endpunkt, wie ich angeblich bin, und ich bekomme wieder ein Ergebnis mit einem Zugriffstoken. Dann verpacke ich dieses Access-Token als json.

Das Ergebnis davon ist, dass die Torii Popup auf der Seite Schienen geht:

enter image description here

Leider, was ich hatte gehofft, für die Torii Popup war zu verschwinden, geben meine app die access_token und damit der Code weitergeht und den Code in meinem then Block ausführt.

Wohin gehe ich falsch?

Antwort

5

Vielen Dank an Kevin Pfefferle, der mir bei der Lösung geholfen hat und den Code an seine App (gitzoom) weitergegeben hat, wo er eine Lösung implementiert hat.

Also die erste Lösung ist, meine redirectUri zu löschen, und es auf Github localhost:4200 setzen. Dadurch wurde die App so umgeleitet, dass sie eine Ember-App ist, an die sie weitergeleitet wird.

Das zweite Update war eine benutzerdefinierte Torii Anbieter

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

nicht sicher, warum diese then Auslöser zu schaffen, sondern die then ich vorher nicht der Fall war benutzte. Wie auch immer, es packt die Daten und gibt sie zurück, und dann bekommt das Versprechen, das ich vorher benutzt habe, die Daten korrekt.

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

Also los! Hoffentlich hilft das anderen Leuten, die in der Zukunft stecken bleiben.