我正在使用php sdk登录用户访问该网站。另外我使用redirect_uri重定向到login.php我正在设置一个带有用户ID的cookie。然后,我正在检查cookie是否存在我正在使用头函数,以便将用户dircet回main.php
<?php if(isset($_COOKIE['id']) == false){
require_once('scripts/facebook.php');
$config = array('appId' => 'xxx','secret' => 'xxx');
$params = array('scope' => 'email,offline_access,user_birthday', 'redirect_uri' => 'http://www.xxx.com/login.php');
$facebook = new Facebook($config);
$user = $facebook->getUser();
if($user) {
try {
$user_profile = $facebook->api('/me','GET');
$userid = $user_profile['username'];
//insert cookie
$expire = time() + 31556926;
$cookie_id = $user_profile['username'];
setcookie("id", $cookie_id, $expire);
header('Location: main.php');
} catch(FacebookApiException $e) {
$login_url = $facebook->getLoginUrl($params);
echo '<img src="assets/login.png"><br>';
echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>';
error_log($e->getType());
error_log($e->getMessage());
}
} else {
$login_url = $facebook->getLoginUrl($params);
echo '<img src="assets/login.png"><br>';
echo '<a href="' . $login_url . '"><img src="assets/facebook_login.png"></a>';
}//end facebook
}else{
//if cookie id is set
header('Location: main.php');
}
?>
现在,问题是当用户对应用进行身份验证时,它会重定向到登录页面。这意味着php页面没有刷新。我怎么解决这个问题 ? 更新:如果用户刷新页面或再次单击登录,他将自动重定向到主?
答案 0 :(得分:1)
我在这里有同样的问题。我通过Facebook PHP函数getLoginURL()重定向网站用户使用Facebook网站登录。一旦用户进入Facebook的登录屏幕并被重定向回我的网站,该页面就不会刷新。这意味着我无法更新当前登录用户的页面显示。这看起来有点愚蠢 - 因为我认为那将是明显的“默认”事情。
如果我/你添加了客户端Facebook JS和root div,那么这个过程适用于Facebook JS驱动的页面重新加载 - 但是基于拉入客户端Facebook JS的重新加载是我无法做到的依赖 - 它只会增加膨胀并使事情复杂化。任何有关如何解决这个问题的任何其他想法的人。
客户端JS放在关闭正文标记之前:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '<?php echo $facebook->getAppID() ?>',
cookie: true,
xfbml: true,
oauth: true
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>