Ruby on rails 如何使用Octokit Ruby vs Restclient处理OAuth响应
您好,我是Ruby/Rails新手,我有一个关于使用GitHub的Octokit的Ruby版本处理OAuth响应的问题。在阅读了文档之后,我对如何使用wrapper和RestClient遵循最佳实践感到有点困惑。当我授权我的应用程序时,响应返回一个“代码”,我应该用它来交换访问令牌 在GitHub API文档中,它显示了一个使用Restclient的Sinatra示例,该示例当前在会话控制器的创建操作中。然而,它说在构建应用程序时应该采用不同的方法,并且应该使用Octokit库,但是我找不到任何关于如何使用Octokit将代码交换为访问令牌的文档 我的目标是能够通过用户的GitHub帐户为应用程序创建新成员,保存该信息,然后使用该帐户登录,而不是创建用户名/密码。我在下面粘贴了新的.html.erb代码,以显示我正在发出的请求。非常感谢您的帮助,谢谢 会话控制器Ruby on rails 如何使用Octokit Ruby vs Restclient处理OAuth响应,ruby-on-rails,oauth-2.0,github-api,octokit,Ruby On Rails,Oauth 2.0,Github Api,Octokit,您好,我是Ruby/Rails新手,我有一个关于使用GitHub的Octokit的Ruby版本处理OAuth响应的问题。在阅读了文档之后,我对如何使用wrapper和RestClient遵循最佳实践感到有点困惑。当我授权我的应用程序时,响应返回一个“代码”,我应该用它来交换访问令牌 在GitHub API文档中,它显示了一个使用Restclient的Sinatra示例,该示例当前在会话控制器的创建操作中。然而,它说在构建应用程序时应该采用不同的方法,并且应该使用Octokit库,但是我找不到任何
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
class sessioncontrollerOctokit.client\u id,
:client\u secret=>Octokit.client\u secret,
:code=>session\u code},
:accept=>:json)
access\u token=JSON.parse(结果)['access\u token']
结束
结束
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>
使用GitHub登录
开始吧!
,因为自述文件中没有明确说明这一点。我推荐的方法是经常查看源代码,以便更好地了解gem的工作原理。通常,您会发现gem的创建者编写了很好的代码,这些代码是不言自明的,有时甚至会进行注释以提供更多信息,如下所示。以下是您正在寻找的方法,祝您在学习Ruby/Rails的过程中好运,欢迎您!让我知道,如果你有任何更多的问题,并遇到任何更多的问题,让这个工作
# Retrieve the access_token.
#
# @param code [String] Authorization code generated by GitHub.
# @param app_id [String] Client Id we received when our application was registered with GitHub.
# @param app_secret [String] Client Secret we received when our application was registered with GitHub.
# @return [Sawyer::Resource] Hash holding the access token.
# @see http://developer.github.com/v3/oauth/#web-application-flow
# @example
# Octokit.exchange_code_for_token('aaaa', 'xxxx', 'yyyy', {:accept => 'application/json'})
def exchange_code_for_token(code, app_id = client_id, app_secret = client_secret, options = {})
options.merge!({
:code => code,
:client_id => app_id,
:client_secret => app_secret,
:headers => {
:content_type => 'application/json',
:accept => 'application/json'
}
})
post "#{web_endpoint}login/oauth/access_token", options
end
谢谢,我现在要测试一下!