如何从Facebook javascript SDK获得授权代码

How to get authorization code from Facebook javascript SDK

本文关键字:授权 代码 SDK javascript Facebook      更新时间:2023-09-26

我有设计/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错误。我假设这是因为代码参数期望签名请求以外的东西?

所以看起来我需要传入授权码,但我找不到方法。直接url示例表明,您可以指定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

只是为了防止其他人偶然发现这个问题,你不需要在使用设计/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参数然后在URL中添加code= not signed_request

使用客户端认证,您不需要使用'code'。这种反应。您拥有的authResponse将已经包含access_token。FB.login()已经为您完成了所有这些。你有"窗口"。Location =…",用户登录。

检查认证文档-确保您正在阅读客户端部分。还可以查看fb.login

上的文档