获取用户的Facebook登录状态,但不希望重定向

时间:2012-10-24 13:40:19

标签: php facebook api curl https

我正在建立一个使用php facebook库的网站。在每个页面的开头,我正在检查用户是否使用$ facebook-> getLoginStatusUrl($ params)函数登录到facebook(或尝试)。我遇到的问题是,检查该功能的唯一真正方法是让用户根据他们的雕像重定向到一个页面(通过将它们引导到该函数返回的URL)。我无法使用file_get_contents或cURL,因为该函数返回的URL使用https。无论如何,我是否可以使用服务器端方法获取该URL的内容?或者是使用重定向执行此操作的绝对唯一方法?我更倾向于不将此作为客户端操作(通过Javascript)。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

我对Facebook的PHP库并不熟悉,所以无法判断是否有更好的方法来做你想做的事情,但是file_get_contents和cURL都应该可以正常使用HTTPS,只需给它们完整的网址(例如“https://google.com/”)

答案 1 :(得分:0)

您可以使用facebook getUser()函数检查用户是否已登录并已向您的网站发送了permisssions。之后,您可以使用getLoginUrl()或getLogoutUrl()向用户显示右键:

$user = $facebook->getUser();    

if (!$user)
{
  $loginUrl = $facebook->getLoginUrl(array(
    'redirect_uri' => REDIRECT_URL,
    'scope' => APP_PERMS,
    'display' => 'page'
  ));

  //do something with $loginUrl, for example:
  echo '<a href="'.$loginUrl.'">Login with facebook</a>';
}
else
{
  //check that this user is still valid
  $realUser = $facebook->api('me');

...

您可以在facebook docs中了解有关此功能的更多信息:

https://developers.facebook.com/docs/reference/php/

答案 2 :(得分:0)

  

他们是否可以使用服务器端方法获取该URL的内容?

这对您没有帮助,因为客户端用来登录Facebook的服务器不是您的服务器,而是他的浏览器。

因此,检查用户是否登录必须在他们的浏览器中进行 - 这就是浏览器被重定向到Facebook的原因,因为这是阅读在Facebook域下设置的cookie的唯一方法。

  

我更不愿意将此作为客户端操作(通过Javascript)。

由于重定向,它已经是一种客户端操作。

如果用户在浏览器中登录Facebook,绝对没有办法让你的服务器独自弄明白。