2
  1. 我希望人们使用他们的 Facebook 帐户登录我的网站。
  2. 我需要从他们的 Facebook 个人资料中提取一些信息并将其添加到我网站的数据库中

我尝试使用 OAuth 2.0 方法重定向到这个 url

https://www.facebook.com/dialog/oauth?
    client_id=YOUR_APP_ID
   &redirect_uri=YOUR_REDIRECT_URI
   &scope=COMMA_SEPARATED_LIST_OF_PERMISSION_NAMES
   &state=SOME_ARBITRARY_BUT_UNIQUE_STRING

我成功地对用户进行了身份验证,但现在出现了主要问题。如何访问作为响应发送的数据,我只能看到一个GET名为变量code和一些长文本。如何转换为可用数据?

我为我的网站使用 php

4

4 回答 4

4

交换用户访问令牌的代码

用户授权您的应用程序后,您应该发出服务器端请求以将上面返回的代码交换为用户访问令牌。

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID
&redirect_uri=YOUR_REDIRECT_URI
&client_secret=YOUR_APP_SECRET
&code=CODE_GENERATED_BY_FACEBOOK

client_secret 参数必须是应用程序设置中显示的应用程序密钥。对此请求的响应正文将是一个 url 编码的字符串,格式如下:

access_token=USER_ACESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES

您应该解析此字符串并使用 access_token 值向 Graph API 发出请求。您还应该将访问令牌保留在数据库中,以便向 API 发出进一步请求,而无需重新验证用户身份。

一旦访问令牌到期时间到达,令牌将失效,不能再用于对 API 的请求。要获取新的用户访问令牌,您必须再次让用户通过此流程。但是,如果用户没有取消对您的应用程序的授权,并且您要求的权限超出了用户已经授予您的应用程序的权限,则不会显示任何对话框,并且用户将使用新代码透明地重定向到您的 redirect_uri可以换成新的用户访问令牌。

如果在交换用户访问令牌的代码时出现问题,授权服务器将发出 HTTP 400 并在响应正文中以 JSON 对象的形式返回错误:

{
   "error": {
      "type": "OAuthException",
      "message": "Error validating verification code."
   }
}

如需进一步参考结帐http://developers.facebook.com/docs/authentication/server-side/

向 Graph API 发出请求

使用有效的用户访问令牌,您可以请求从 Graph API 读取和写入数据。一个常见的第一个请求是获取刚刚对您的应用进行身份验证的用户的基本信息(包括 id 和名称):

https://graph.facebook.com/me?access_token=YOUR_USER_ACCESS_TOKEN
于 2012-06-13T14:16:28.440 回答
1

Facebook有一个官方的 php SDK。这让生活更轻松。

检查此示例代码

于 2012-06-13T14:14:20.357 回答
1

在带有 facebook 的 OAuth 2.0 中,整体概念很简单,如下所示。

Step 1. 通过 GET 请求获取“授权码”

request URI: https://www.facebook.com/dialog/oauth
Params:
    response_type=code
    client_id={add your "App id" got by registering app}
    redirect_uri={add redirect uri defined at the registration of app}
    scope={add the scope needed in your app}
Headers: None

Step 2. 通过POST请求发送授权码获取“Access Token”

request URI: https://graph.facebook.com/oauth/access_token
Params:
    grant_type=authorization_code
    client_id=<add your "App id" got by registering app>
    redirect_uri=<add redirect uri defined at the registration of app>
    code=<obtained authorization code from previous step>
Headers:
    Authorization:Basic encode <App Id:App Secret> with base64 
    Content-Type:application/json

步骤 3. 使用从上述步骤获得的访问令牌并检索用户资源

于 2019-09-25T15:00:15.570 回答
-1

使用 JSON WEB TOKEN(JWT) 解码器获取 token_id 中的数据,当您打印 GET['code'] 的内容时将获得该数据。在其中选择 token_id 复制它并将其粘贴到在线解码器中

于 2018-11-29T17:43:18.743 回答