我正在尝试创建一个用户可以登录的 php 页面,然后喜欢我的页面。如果我在一个块中使用 login_url,它会很好用。
但是我想使用官方的 facebook 登录按钮,特别是因为它允许传入语言环境,然后它将被本地化为正确的语言......而且看起来不错!
做了一些研究,似乎php中的登录状态与js中的登录状态不同步,但我只看到了一些代码片段(其中大部分是api的过时版本)。
谁能给我指出正确的方向,我需要在这里做什么才能使 facebook 登录按钮与 $login_url 做同样的事情?
现在我观察到以下行为:
- 我打开页面,登录按钮和链接可见,因为 php 代码认为用户未登录
- 我单击登录按钮并登录
- php代码仍然认为用户没有登录,所以仍然显示登录按钮
- 只有在我单击登录链接之前,我才能正确登录并且登录按钮在重新加载时消失。
现在点击按钮只是重新加载页面,甚至不要求用户登录。如果用户使用登录按钮登录,页面的 php 部分会认为用户没有登录......
<?php
require("facebook/facebook.php");
$locale = "en_US"; // TODO
$connect_facebook_url = "'//connect.facebook.net/" . $locale . "/all.js#xfbml=1&appId=XXXXXXXXXXXXXXXXXXXXXXX'";
$facebook = new Facebook(array(
"appId" => "XXXXXXXXXXXXXX",
"secret" => "XXXXXXXXXXXXXXXXX",
"cookie" => true,
));
$access_token = $facebook->getAccessToken();
// Get User ID
$user_id = $facebook->getUser();
if($user_id)
{
// We have a user ID, so probably a logged in user.
// If not, we'll get an exception, which we handle below.
try
{
$user_profile = $facebook->api('/me','GET');
$likes = $facebook->api(array(
'method' => 'fql.query',
'query' => 'SELECT page_id FROM page_fan WHERE uid = "'
. $user_profile['id']
. '" AND page_id="XXXXXXXXXXXXX"', ));
}
catch(FacebookApiException $e)
{
// If the user is logged out, you can have a
// user ID even though the access token is invalid.
// In this case, we'll get an exception, so we'll
// just ask the user to login again here.
$login_url = $facebook->getLoginUrl();
error_log($e->getType());
error_log($e->getMessage());
}
}
else
{
// No user, print a link for the user to login
$login_url = $facebook->getLoginUrl();
}
if(count($likes) > 0)
{
$likes_result = "User likes this page";
}
else
{
$likes_result = "User doesnt like this page";
}
if($login_url)
{
$login_string = '<a href="' . $login_url . '">' . 'IDST_MENUITEM_SIGN_IN' . '</a>';
}
?>
<html>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<div id="fb-root"></div>
<script>
(function(d, s, id)
{
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src =
<?php echo $connect_facebook_url; ?>
;
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<body bgcolor="#000000">
<div align="center">
<table>
<tbody>
<tr>
<td>
<img src="http://www.myapp.com/wp-content/uploads/2012/05/MyApp-logo.png"/>
</td>
<td style="align:left; vertical-align:middle">
<p style="font-family:segoe ui;color:white;font-size:40px;">MyApp</p>
</td>
</tr>
</tbody></table>
</div>
<p> <p>
<div align="center" style="font-family:segoe ui;color:white;font-size:20px;">
<?php if ($login_string) : ?>
<div class="fb-login-button" size="xlarge" data-width="200"></div>
<?php else: ?>
<div class="fb-like"
data-href="https://www.facebook.com/MyApp"
data-width="200"
data-colorscheme="dark"
data-show-faces="true"
data-send="true">
</div>
<?php endif; ?>
<br>
<p>
<?php echo $likes_result; ?>
</p>
<p>
<?php echo 'Please <a href="' . $login_url . '">login.</a>'; ?>
</p>
</div>
</body>
</html>