gpt4 book ai didi

ruby-on-rails - 使用 Ember.js 和 Torii (oauth2) 连接到 github

转载 作者:行者123 更新时间:2023-12-04 07:38:52 25 4
gpt4 key购买 nike

我正在尝试在 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 页面:

enter image description here

不幸的是,我希望 torii 弹出窗口消失,给我的应用程序 access_token,然后代码继续执行我的 then block 。

我哪里错了?

最佳答案

非常感谢 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')
})

那我们开始吧!希望这可以帮助其他陷入 future 困境的人。

关于ruby-on-rails - 使用 Ember.js 和 Torii (oauth2) 连接到 github,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com