首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取facebook用户访问令牌/ PHP SDK 3.1.1

获取facebook用户访问令牌/ PHP SDK 3.1.1
EN

Stack Overflow用户
提问于 2012-05-09 06:51:10
回答 1查看 14.8K关注 0票数 0

由于本文没有回答问题( How to get user access token? ),因此我想问一下如何获取用户访问令牌。

我已经有了我的应用程序访问令牌,很简单。我还看到在最新的php sdk Base_facebook类中有一个getUserAccesstoken函数,但它没有用,因为最终你只能获得应用程序访问令牌。

这是我的身份验证流程:用户进入fanpage应用程序,在某些情况下,他必须授权权限:

代码语言:javascript
复制
$facebook = new Facebook(array(
    'appId' => $app_id,
    'secret' => $secret,
    'cookie' => true
));

$user = $facebook->getUser(); 

if($user == 0) {

  $login_url = $facebook->getLoginUrl($params = array('scope' => "publish_stream", 'redirect_uri' => "https://www.facebook.com/pages/PAGENAME/PAGE-ID?sk=app_APP-ID0&app_data=af"));

echo ("<script> top.location.href='".$login_url."'</script>");
}

这行得通,很好,app_data "af“参数被设置为在扇页应用程序中返回页面。

因为我意识到,当我删除应用程序并返回到身份验证页面时,用户cookie ($user)仍然是设置的,因此用户不会再次被要求权限。

因此,我还想检查权限,因此我需要用户访问令牌

代码语言:javascript
复制
    try{
        $permissions = $facebook->api("/me/permissions", 'GET', array('access_token' => "$access_token" ));
    }
    catch (Exception $e) {echo ("<script> top.location.href='".$login_url."'</script>"); }

    if( array_key_exists('publish_stream', $permissions['data'][0]) ) {
        // Permission is granted!

    } else {
        echo ("<script> top.location.href='".$login_url."'</script>");
    }

因此,我尝试了服务器端身份验证示例(https://developers.facebook.com/docs/authentication/server-side/),但这在这里当然不起作用,因为您无法从应用程序内部读取$_REQUEST,所以我将停留在这里。-你们如何检查应用程序内部的权限?

代码语言:javascript
复制
   $app_id = "YOUR_APP_ID";
   $app_secret = "YOUR_APP_SECRET";
   $my_url = "YOUR_URL";

   session_start();
   $code = $_REQUEST["code"];

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "https://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }

TIA &干杯,丹尼尔

EN

回答 1

Stack Overflow用户

发布于 2012-05-09 07:19:00

请参阅Facebook Developer Docs中关于服务器端身份验证的部分:https://developers.facebook.com/docs/authentication/server-side/

或者,您可以使用混合的客户端-服务器身份验证:http://developers.facebook.com/blog/post/534/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10507661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档