facebook连接api静态网址

时间:2011-05-30 17:59:39

标签: php facebook facebook-php-sdk

有没有办法以静态方式使用facebook connect api?

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

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

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

我用$ facebook-> getLoginUrl()获得的网址结构是:

https://www.facebook.com/dialog/oauth?client_id= {MY_APP_KEY}&安培;范围= {PERMISSIONS}&安培; REDIRECT_URI = {MY_SITE / Facebook的的login.php}&安培;状态= {A_32_CHAR_CODE_LIKE_MD5_MAYBE}

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

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

您可以有不同的方案:

  • 您对用户没有Facebook数据:用户未确定登录您的应用。

  • 您可以读取用户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>';
    }
}

希望有所帮助!

答案 2 :(得分:0)

所选答案并没有真正回答这个问题。

如果您想将生成getLoginUrl函数调用所需的所有Facebook代码隔离到一个单独的文件中,您可以使用元刷新轻松完成此操作。

所以在你的标题点链接&#34;登录Facebook&#34;到&#34; facebook_login.php&#34;。在此页面上包含来自SDK for getLoginUrl的必要调用,然后添加以下HTML行。

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

我多次测试了它并且它有效。

仅供参考使用Facebook SDK 4.0。