有没有办法以静态方式使用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是什么?
答案 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。