2016-05-16 53 views
3

我正尝试在Torii中使用github-oauth2提供程序,但是我很难理解如何设置一些回调。我会跟踪我使用的代码,以及我对它的理解,并希望能够帮助我确定哪里出错。通过Ember.js和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。

这样做的结果是,牌坊弹出去铁轨页:

enter image description here

不幸的是,我希望的是为牌坊弹出消失,给我的应用程序的access_token,和代码移动并执行我的then块中的代码。

我哪里错了?

回答

5

非常感谢Kevin Pfefferle,他帮我解决了这个问题,并将代码分享给了他的应用程序(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') 
}) 

所以我们走吧!希望这有助于未来的其他人。