【问题标题】:Facebook graph authenticate client side and server side simultaneously?Facebook 图同时验证客户端和服务器端?
【发布时间】:2011-02-22 00:55:46
【问题描述】:

这是我尝试在我的 Rails 网站上使用 facebook graph 做的事情:

  1. 获取用户权限并通过 facebook 验证用户身份的用户客户端流程
  2. 将在客户端收到的访问令牌发送到我的服务器,以便从服务器端进行额外处理

当我尝试执行此操作时,我从 facebook 收到一条错误消息,提示我无法验证服务器。我正在使用客户端提供给我的相同令牌来执行此操作。有什么方法可以在不让用户使用服务器端进程登录的情况下对服务器进行身份验证?

【问题讨论】:

    标签: ruby-on-rails facebook oauth


    【解决方案1】:

    在你的 JavaScript 中尝试这样的事情:

    FB.login(function(response) {
      if (response.session) {
       location.href = '#{authenticate_path}?access_token=' + escape(response.session.access_token);
       }
     }, {perms: 'offline_access'});
    

    然后,您可以使用给定的访问令牌通过 OAuth2 gem 访问 facebook:

    client = OAuth2::Client.new(<app_id>, <app_secret>, :site => 'https://graph.facebook.com')
    token = OAuth2::AccessToken.new client, params[:access_token]
    token.get('/me')
    

    【讨论】:

    • 谢谢!这似乎有效。这是我之前尝试过但没有成功的方法: access_token = client.web_server.get_access_token( params[:token], :redirect_uri => @facebook_settings[RAILS_ENV]['oauth_callback_url'] ) 你知道为什么这没有工作吗?
    • 使用上面的 javascript,您已经拥有访问令牌。然后您尝试使用该访问令牌来获取另一个访问令牌 - 这是行不通的。
    • 我明白了。另一个相关问题,我正在尝试进行 ajax 调用以使这一切都通过 jquery 发生。我无法将我的访问令牌作为发布数据传递。当我这样做时: $.ajax({ type: 'POST', url: '/oauth/callback', data: { access_token: $access_tokens, stuff: "123" }, ); } });我可以看到 params[:stuff] 数据,但 access_token 为空
    • $access_tokens 应该是什么?您可以致电FB.getSession().access_token 获取访问令牌。
    • $access_tokens 只是一个保存 access_token 的变量。出于某种原因,如果我执行类似 data: { access_token: "2_7.sljo3jilrjlsjlsjflijsi3" } 之类的操作,我可以将访问令牌作为字符串传递,但是当我说 access_token: var_holding_access_token 时,该值不会传递到服务器以便我可以访问它。我最终得到一个空白值。访问令牌不是字符串吗?我需要把它变成一个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多