我正在尝试在Torii中使用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服务器。我在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端点,然后返回带有访问 token 的结果。然后,我将该访问 token 打包为json。
结果是torii弹出窗口转到rails页面:
不幸的是,我希望的是让torii弹出窗口消失,为我的应用程序提供
access_token
,让代码继续前进并执行我的then
块中的代码。我要去哪里错了?
最佳答案
非常感谢Kevin Pfefferle,他帮助我解决了这一问题,并将代码共享给了他的应用(gitzoom),并在其中实现了解决方案。
因此,第一个解决方法是清除我的redirectUri
,并将其在github上设置为localhost:4200
。这使应用程序重定向,因此它是重定向到的Ember应用程序。
第二个解决方法是创建一个自定义的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
没有触发。无论如何,它获取数据并返回它,然后我之前使用的 promise 正确地获取了数据。this.get('torii').open('github-oauth2').then((data) => {
//do signon stuff with the data here
this.transitionTo('dashboard')
})
所以我们去了!希望这对将来陷入困境的其他人有所帮助。