facebook连接api静态url


facebook connect api static url

有没有一种方法可以静态使用facebookconnectapi?

当我们使用facebookphp-sdk时,登录到facebook的链接或按钮类似于https://www.facebook.com/dialog/oauth..................

我想要的是取消在每个页面上包含php-sdk,因为它会在高峰时段导致一些额外的处理和服务器负载。

我想进行一次会话检查,以了解用户是否登录,例如,检查他的facebook用户id和姓名是否存储在会话中,如果没有,则显示一个静态登录按钮。然后,在登录facebook后,他将访问facebook-login.php,其中将包括facebookphp-sdk,并处理他的数据并将其存储在会话中,这样他就可以保持登录状态,而不在每个页面中包括php-sdk。

我使用$facebook->getLoginUrl()得到的url结构是:

https://www.facebook.com/dialog/oauth?client_id={MY_APP_KEY}&scope={PERMISSIONS}&redirect_uri={MY_SITE/Facebooklogin.php}&状态={A_32_CHAR_CODE_LIKE_MD5_MAYBE}

最后一个问题是:登录按钮中的URL是什么?

只需加载sdk并执行以下操作:

echo '<a href="' . $facebook->getLoginUrl( array('next'=>'http://mysite.com', 'req_perms' => 'email,read_stream,publish_stream')) . '">Connect to Facebook</a>';

该url对于已注销的用户始终有效

这是个好问题。首先,用户登录到您的应用程序意味着您拥有该用户的有效访问令牌

在使用访问令牌进行API调用之前,无法确保访问令牌有效。因此,如果你想确保用户仍然登录到每个页面,你必须在每个页面上对Facebook进行API调用。有点重,但没有其他解决方案。

您可以做的是假设您拥有的访问令牌是有效的,并且只检查一次(当您确实需要确保用户已登录时)。

你可以有不同的场景:

  • 您没有关于该用户的脸书数据:该用户肯定没有登录您的应用程序。

  • 您可以读取用户ID,但您可能没有该用户的访问令牌:该用户可能未登录。

  • 您可以读取访问令牌,但它可能无效(已过期或被用户吊销):用户可能无法登录。

  • 您有一个有效的访问令牌:用户肯定已登录。

您可以在会话中读取用户ID和访问令牌。会话数组如下所示:

[fb_148195765253871_access_token] => 14819576525...
[fb_148195765253871_user_id] => 1536397056

数组密钥中的数字(此处为148195765253871)是您的应用程序ID。

因此,您可以在每个页面上检查这些密钥是否已设置,如果未设置,则加载SDK并仔细检查(因为访问权限可以存储在SDK正在读取的其他地方):

if (isset($_SESSION['fb' . YOUR_APP_ID . 'access_token'])) {
    // assume to user is logged in
    // and keep going
} else {
    require "facebook.php";
    $facebook = new Facebook(array(
        'appId'  => YOUR_APP_ID,
        'secret' => YOUR_APP_SECRET,
    ));
    // Make an API call to be sure the user is logged in
    // ie : that you have a valid access token
    $user = $facebook->getUser(); // User ID
    if ($user) {
        try {
            $user_profile = $facebook->api('/me');
        } catch (FacebookApiException $e) {
            $user = null;
        }
    }
    if ($user) {
        // The user is logged in for sure
    } else {
        // The user is not logged in for sure
        // Make him log in
        echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
    }
}

希望能有所帮助!

所选答案并不能真正回答问题。

如果你想将生成getLoginUrl函数调用所需的所有Facebook代码隔离到一个单独的文件中,你可以通过使用元刷新轻松地做到这一点。

因此,在您的标题中指向"使用Facebook登录"到"Facebook_Login.php"的链接。在此页面上,包括SDK对getLoginUrl的必要调用,然后添加以下HTML行。

<meta http-equiv="refresh" content="0;URL=<?=$helper->getLoginUrl(array('email', 'user_friends'));?>">

我对此进行了多次测试,结果很有效。

仅供参考,使用Facebook SDK 4.0。