Ruby on Rails中的回调

时间:2016-07-07 05:20:38

标签: ruby-on-rails ruby heroku oauth

使用' oauth2' gem和Heroku服务器,我设法创建了一个客户端对象并将用户重定向到登录站点:

client = OAuth2::Client.new(
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
:authorize_url => "/oauth/authorize",
:token_url => "/oauth/token",
:site => "https://connect.xxxxxxxxxx.com")

redirect_to(client.auth_code.authorize_url(:redirect_uri => 'https://xxxxx.herokuapp.com/callback'))

之后,浏览器会根据需要将自身重定向到回调链接,例如:

https://xxxxx.herokuapp.com/callback?code=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

我需要访问授权代码然后发送访问令牌和刷新令牌的发布请求,但对Ruby和Ruby on Rails来说是全新的,我不知道如何获取回调并解析代码。我所研究的所有十几个教程/文档都提到授权代码应该被神奇地获得,'但我不确定这究竟是如何运作的。我试过创建一个回调'控制器和视图无济于事 - 路径文件中可能缺少某些东西吗?非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

你的CallbackController会开始看起来像这样:

class CallbackController < ApplicationController
  def index
    access_token = client.auth_code.get_token(params[:code], redirect_uri: 'https://xxxxx.herokuapp.com/callback')
    # Now you have an OAuth2::AccessToken object that you can either use to:
    # - make direct requests to the API
    # - or access access_token.token, access_token.refresh_token, access_token.expires_at, access_token.expires_in and store those
    #   somewhere for later use
    # http://www.rubydoc.info/github/intridea/oauth2/OAuth2/AccessToken
  end

  private

  def client
    @client ||= OAuth2::Client.new(
      "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      authorize_url: "/oauth/authorize",
      token_url: "/oauth/token",
      site: "https://connect.xxxxxxxxxx.com"
    )
  end
end