Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook访问令牌:一旦用户接受我的应用程序,我如何获得它?_Facebook_Access Token - Fatal编程技术网

Facebook访问令牌:一旦用户接受我的应用程序,我如何获得它?

Facebook访问令牌:一旦用户接受我的应用程序,我如何获得它?,facebook,access-token,Facebook,Access Token,当用户第一次访问包含facebook应用程序的我的网站时,它要求他允许它,并要求他这样做,然后我得到可以转换为访问令牌的代码。到目前为止还不错 但是,一旦用户已经访问了站点,我如何获得令牌呢? 只要此令牌表单第一次处于活动状态,一切正常。但是,当用户一周前已经允许该应用程序,并且只再次访问我的页面时,我如何获得另一个令牌呢?我使用cookie方法将访问令牌存储在用户的计算机上 FB.init({appId: 'your app id', status: true, cookie: true, x

当用户第一次访问包含facebook应用程序的我的网站时,它要求他允许它,并要求他这样做,然后我得到可以转换为访问令牌的代码。到目前为止还不错

但是,一旦用户已经访问了站点,我如何获得令牌呢?
只要此令牌表单第一次处于活动状态,一切正常。但是,当用户一周前已经允许该应用程序,并且只再次访问我的页面时,我如何获得另一个令牌呢?

我使用cookie方法将访问令牌存储在用户的计算机上

FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true});
在facebook.php文件中,您需要将cookieSupport设置为true,然后:

private $cookieSupport = true;
或者使用此处的get_facebook_cookie功能:

然后,访问令牌存储在名为“fbs\u APPID”(带expire)的cookie中。如果您希望cookie持续几个小时以上,则需要请求扩展权限“脱机访问”:

使您的应用程序能够随时代表用户执行授权请求。默认情况下,大多数访问令牌在短时间后过期,以确保应用程序仅在用户积极使用应用程序时代表用户发出请求。此权限使OAuth端点返回的访问令牌长期有效

使用php

session_start();
// Create our Application instance.
$facebook = new Facebook(array(
                'appId' => FACEBOOK_APP_ID,
                'secret' => FACEBOOK_APP_SECRET,
                'cookie' => true,
                'domain' => 'example.com'

));

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
        $_SESSION['me'] = $me;
        $_SESSION['uid'] = $uid;
        $_SESSION['session'] = $session;

    } catch (FacebookApiException $e) {
        error_log($e);
    }
}

你可以在你的应用程序中通过$\u SESSION['SESSION']['access\u token']引用access\u令牌,更多教程请访问fbdevtutorials.com

既然Facebook正在迁移到Oauth2,Javascript创建的cookie就不同了。我让它为我工作,并将其添加到Rails的FGraph插件的分支中-


其中一个技巧是,当您从存储在cookie中的“code”参数请求访问令牌时,您必须传入“redirect\u uri”,但您希望它为空。

在客户端流上,您可以使用scope参数中的权限将用户重定向到OAuth对话框。如果用户已经接受了你的应用和权限,他将被重定向到你的“redirect_uri”,并在uri片段中使用access_标记,否则将提示需要的权限

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&scope=email,read_stream&response_type=token
在服务器端流上,您应该具有“代码”,以便可以在OAuth端点上将其兑换为access_令牌:

https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&redirect_uri=YOUR_URLclient_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
文档:

您也可以使用:

$access_token = $facebook->getAccessToken();

因此,识别用户的唯一方法是将令牌保存在cookie中?如果您检查facebook.php中的getSession()函数,您会看到他们使用$\u GET或$\u cookie构建会话。您是否在使用任何特定语言查找它?