嗨,我是 Ruby/Rails 的新手,我有一个关于使用 GitHub 的 Octokit 的 Ruby 版本处理 OAuth 响应的问题。阅读文档后,我对如何使用包装器与使用 RestClient 遵循最佳实践有点困惑。当我授权我的应用程序时,响应会返回一个“代码”,我应该用它来交换访问令牌。
在 GitHub API 文档中,它显示了一个带有 Restclient 的 Sinatra 示例,该示例目前在我的会话控制器的创建操作中。但是,它说在构建应用程序时应该以不同的方式处理它,并且应该使用 Octokit 库,但我找不到任何关于如何使用 Octokit 交换访问令牌代码的文档。
我的目标是能够通过用户的 GitHub 帐户为应用程序创建一个新成员,保存该信息,然后使用该帐户登录,而不是创建用户名/密码。我在下面粘贴了我的 new.html.erb 代码,以显示我正在提出的请求。非常感谢任何帮助,谢谢!
会话控制器
class SessionsController < ApplicationController
def new
@client_id = Octokit.client_id
end
def create
# CHANGE THIS TO USE OCTOKIT INSTEAD
session_code = request.env['rack.request.query_hash']['code']
result = RestClient.post('https://github.com/login/oauth/access_token',
{:client_id => Octokit.client_id,
:client_secret => Octokit.client_secret,
:code => session_code},
:accept => :json)
access_token = JSON.parse(result)['access_token']
end
end
OAuth 请求
<p>
Sign In with GitHub
</p>
<p>
<a href="https://github.com/login/oauth/authorize?scope=user:follow&client_id=<%= @client_id %>">Click here</a> to begin!</a>
</p>