OAuth2如何处理来自Google的响应代码?

时间:2012-07-20 20:56:43

标签: ruby-on-rails ruby oauth-2.0

所以我使用Google登录,并使用代码参数点击我的回调网址。

以下是我启动客户端的方式,我正在使用oauth2 gem。

  def oauth_client(channel_name)
    file = YAML.load_file("#{Rails.root}/config/oauth_credentials.yml")
    client_id = file['oauth_credentials'][channel_name]['client_id']
    client_secret = file['oauth_credentials'][channel_name]['secret']
    site = file['oauth_credentials'][channel_name]['site']

    OAuth2::Client.new(client_id, client_secret, site: site, authorize_url: "/o/oauth2/auth", connection_opts: { params: { scope: "https://www.googleapis.com/auth/adsense https://www.googleapis.com/auth/analytics.readonly" } })
  end

  def oauth_url_for(channel_name)
    client = oauth_client(channel_name)
    client.auth_code.authorize_url(:redirect_uri => oauth_callback_url(channel: channel_name))
  end

这是我的控制器

class Oauth2Controller < ApplicationController
  include ApplicationHelper

  def callback
    token = oauth_client(params[:channel]).auth_code.get_token(params[:code], :redirect_uri => oauth_callback_url(channel: params[:channel]))
    current_user.connections.create!(channel: params[:channel], token: token)
    render text: request.inspect
  end
end

不幸的是,由于谷歌的回复说我请求的页面无效,我无法get_token。

1 个答案:

答案 0 :(得分:1)

看起来您不是在客户端初始化中定义token_url值,或者稍后。它是“o / oauth2 / token”。默认使用“/ oauth / token”,这可能是您“请求的页面无效”错误的原因。

来源: http://rubydoc.info/gems/oauth2/0.8.0/OAuth2/Client#initialize-instance_method