【问题标题】:How to get authorization code from Facebook javascript SDK如何从 Facebook javascript SDK 获取授权码
【发布时间】:2011-10-26 00:00:06
【问题描述】:

我已经设置了设计/omniauth,现在我想使用 Facebook javascript SDK 登录/请求权限,然后将它们路由到我的omniauth 回调控制器。

这就是我所拥有的(coffeescript)。

$('#fb-connect').live 'click', ->
  FB.login ((response) ->
    if response.authResponse
      window.location = "/users/auth/facebook/callback?code=" + response.authResponse.signedRequest 
    else
      console.log "User cancelled login or did not fully authorize."
  ), scope: "email, offline_access"

  false

但我收到了 Invalid verification code format 错误。我假设这是因为代码参数需要签名请求以外的东西?

更新

所以看起来我需要传递授权码,但我找不到方法。 direct url example 表明您可以指定 response_type=code 来获取授权码,但我不知道如何使用 FB.api 来做到这一点。有什么想法吗?

http://www.facebook.com/dialog/oauth/?
  scope=email,user_birthday&
  client_id=123050457758183&
  redirect_uri=http://www.example.com/response&
  response_type=code

【问题讨论】:

    标签: javascript ruby-on-rails-3 facebook devise omniauth


    【解决方案1】:

    以防万一其他人偶然发现这个问题,您在使用 Devise/omniauth 时不需要将任何参数传递给您的控制器......以下工作完美

    $('#fb-connect').live 'click', ->
      FB.login ((response) ->
        if response.authResponse
          window.location = "/users/auth/facebook/callback
        else
          console.log "User cancelled login or did not fully authorize."
      ), scope: "email, offline_access"
    
      false
    

    编辑

    如果使用较小的版本或解决参数和代码都丢失时引发的异常,则以下内联 js 可与 onclick 一起使用。

    <script>
      function fb_authorise(){
        FB.login(function(response) {
          if(response.authResponse) {
            window.location = "/users/auth/facebook/callback?signed_request=<%= params[:signed_request]%>"
          }
        }, {scope: "email, offline_access"});
      };
    </script>
    

    因此,在回答您最初的问题时,您使用了 signed_request 参数,然后使用 code= not signed_request 添加到 URL 中

    【讨论】:

    • 我认为这仅适用于omniauth 0.3.2 及更高版本(当时我使用的是0.3.0)
    【解决方案2】:

    使用客户端身份验证,您无需使用“代码”。您拥有的 response.authResponse 将包含 access_token 。 FB.login() 已经为您完成了所有这些工作。如果您有“window.location = ...”,则用户已登录。

    查看authentication 上的文档 - 确保您正在阅读客户端部分。还要检查fb.login上的文档

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多