如何使用ruby获取facebook的oauth访问令牌

5 ruby-on-rails oauth-2.0 facebook-access-token

我试图在ruby中以编程方式获取facebook的oauth访问令牌.

我的代码如下:

client = OAuth2::Client.new(
  APP_ID,
  SECRET_ID,
  :authorize_url => "/dialog/oauth",
  :token_url => "/oauth/access_token",
  :site => "https://www.facebook.com/"
)

code = client.auth_code.authorize_url(:redirect_uri => "http://www.facebook.com/")
token = client.auth_code.get_token(code, :redirect_uri => "https://graph.facebook.com/")
OAuth2::AccessToken.new(client, token.token, {:mode => :query, :param_name =>"oauth_token"})
Run Code Online (Sandbox Code Playgroud)

当我尝试运行上面的ruby代码时,我得到以下异常

https://www.facebook.com/dialog/oauth?response_type=code&client_id=APP_ID
51&redirect_uri=http%3A%2F%2Fwww.facebook.com%2F

/home/ec2-user/.rvm/gems/ruby-1.9.3-p0@samples/gems/oauth2-0.5.2/lib/oauth2/clie
nt.rb:129:in `get_token': OAuth2::Error (OAuth2::Error)
        from /home/ec2-user/.rvm/gems/ruby-1.9.3-p0@samples/gems/oauth2-0.5.2/li
b/oauth2/strategy/auth_code.rb:29:in `get_token'
        from oauth.rb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

我非常感谢任何帮助,因为我花了一天多的时间试图解决这个问题.

小智 2

您是否尝试过使用redirect_uri而不是localhost:3000您的真实IP地址ex. 231.61.233.57:3000?此外,您可以尝试使用 ssh 隧道进行测试,以便您的本地主机应用程序将在全球范围内可用。查看http://progrium.com/localtunnel/。当您从此工具获取 IP 地址时,请尝试为其设置redirect_uri 参数。