Facebook php sdk - 如何在网站上自动登录我的应用程序

时间:2014-10-15 10:02:44

标签: php facebook facebook-graph-api facebook-php-sdk facebook-login

我希望不要在我的网页上显示登录按钮并将其设置为自动,因此如果有人访问我的网站,则会直接向他显示来自facebook的内容,而不会每次都点击登录按钮。你能救我吗?

我正在使用Facebook PHP SDK4 API。

以下是我的代码:

<?php

// Must pass session data for the library to work (only if not already included in your app)
session_start();

// Autoload the required files
require_once('phpsdk4/autoload.php');

use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\Entities\AccessToken;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\HttpClients\FacebookHttpable;

// Facebook app settings
$app_id = '123456';
$app_secret = 'appsecretpassword';
$redirect_uri = 'mywebpageaddress';

// Initialize the SDK
FacebookSession::setDefaultApplication( $app_id, $app_secret );

?>

<!DOCTYPE html>
<html lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<title>Facebook SDK test</title>
</head>
<body>

<?php

$helper = new FacebookRedirectLoginHelper($redirect_uri, $app_id, $app_secret);
try {
    $session = $helper->getSessionFromRedirect();
}
catch(FacebookRequestException $ex) { } 
catch(\Exception $ex) { }

$loggedIn = false;

if (isset($session))
{
    if ($session) 
    {
        $loggedIn = true;
        try 
        {
            // Logged in
            $user_photos = (new FacebookRequest($session, 'GET', '/me/statuses'))->execute()->getGraphObject(GraphUser::className());
            $user_photos = $user_photos->asArray();

            echo "<pre>";
            print_r($user_photos);
            echo "</pre>";
        } 
        catch(FacebookRequestException $e) 
        { 
            echo "Exception occured, code: " . $e->getCode();
            echo " with message: " . $e->getMessage();  
        }           
    }
}
if (!$loggedIn)
{
  //$loginUrl = $helper->getLoginUrl();
  $loginUrl = $helper->getLoginUrl(array('user_status'));
  echo '<a href="' . $loginUrl . '">Login</a>';
}

?>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

我建议使用JavaScript SDK的FB.getLoginStatus - 这是检查返回用户是否已获得授权的最简单方法:https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus

它刷新用户令牌而无需进行页面刷新 - 您必须使用PHP SDK afaik。

此外,FB.login更容易处理登录。仅当您需要在服务器上执行操作时才使用PHP SDK,并且如果JavaScript SDK没有其他方法。如果您使用的是JavaScript SDK,也不需要更新任何库。

关于您网站上的供稿:不要使用用户配置文件,扩展用户访问令牌仅在60天内有效,之后您必须手动刷新它。如果没有用户交互,你就无法做到这一点,所以如果你使用PHP SDK或JS SDK并不重要。更好地创建Facebook页面并使用扩展页面访问令牌读取该页面的状态(永久有效)。有关访问令牌的更多信息:

相关问题