$ facebook - > getUser()返回错误的值?

Thi*_*yen 2 php facebook facebook-graph-api

问题与标题相同.我正在使用最新的php-sdk(v3.1.1)来运行服务器端身份验证流程.

我在Chrome中有2个标签,一个是我的Facebook页面,另一个是php测试页面.这两个问题多次发生:

  • $facebook->getUser() 即使我登录时仍然返回0.
  • $facebook->getUser() 即使我退出也会返回ID.

我必须解决这个问题:尝试使用提供的access_token启动图形API请求,并检查是否$response->error->type == "OAuthException"确保存在活动会话.

有没有办法$facebook->getUser()"稳定" 使用?我通过SO搜索了很多,但还没找到php-sdk 3.1.1的最佳答案.

非常感谢任何帮助.谢谢.

Bas*_*ler 9

  1. 登录. 由于每个FB SDK的文档例如,getUser()返回用户id甚至当你注销,但有FB账户相关联的cookie.要检测用户是否已登录,您应该使用

    $user = $facebook->getUser();
    //Check Access token
    if ($user) {
         try {
            $user_profile = $facebook->api('/me');
         } catch (FacebookApiException $e) {
            $user = null;
         }
    } 
    if ($user) { 
        //logged-in
    } else {
        //not logged-in
    }
    
    Run Code Online (Sandbox Code Playgroud)

    要登录您的应用程序,请通过关注此网址(请确保您根据应用程序执行的预期操作传递范围),让用户登录您的应用程序而不是相邻选项卡:

    $loginUrl = $facebook->getLoginUrl(
        'scope' => ...
    );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 登出.似乎您的PHP服务器正在为每个会话存储一些访问权限值,因此即使您在浏览器中注销,您的服务器仍然可以使这些令牌有效.实际上,我不知道,它是错误还是功能,但在用户注销后它们不会被Facebook销毁.

    要破坏这些令牌我正在使用这些:

    $facebook->destroySession();
    
    Run Code Online (Sandbox Code Playgroud)

    我每次用户注销时都会调用它$facebook->getLogoutUrl();