Ruby on rails 如何使用Octokit Ruby vs Restclient处理OAuth响应

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库,但是我找不到任何

您好,我是Ruby/Rails新手,我有一个关于使用GitHub的Octokit的Ruby版本处理OAuth响应的问题。在阅读了文档之后,我对如何使用wrapper和RestClient遵循最佳实践感到有点困惑。当我授权我的应用程序时,响应返回一个“代码”,我应该用它来交换访问令牌

在GitHub API文档中,它显示了一个使用Restclient的Sinatra示例,该示例当前在会话控制器的创建操作中。然而,它说在构建应用程序时应该采用不同的方法,并且应该使用Octokit库,但是我找不到任何关于如何使用Octokit将代码交换为访问令牌的文档

我的目标是能够通过用户的GitHub帐户为应用程序创建新成员,保存该信息,然后使用该帐户登录,而不是创建用户名/密码。我在下面粘贴了新的.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
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

谢谢,我现在要测试一下!