2011-10-24 122 views
0

当用户访问我的网站时,我曾打开一个新窗口对用户进行身份验证,并通过我的应用程序请求许可(称为UseCase1)。但是当用户已经登录时,我试图通过PHP SDK获取已登录的用户信息,以便我不需要打开新窗口并检查相同的内容(您将避免打开一个新的窗口,该窗口在同时由于用户已经登录)。但getUser()方法不会返回任何东西。当我通过UseCase1(打开自动关闭的新窗口)时,同样的方法工作正常。 下面是我想使用的代码:使用PHP SDK的Facebook登录验证无法正常工作?

$facebook = new Facebook(array(
       'appId' => $appId, 
       'secret' => $appSecret, 
       'oauth' => true 
       )); 

      $me = $facebook->getUser(); 
      if ($me) { 
       try { 
       $user_profile = $facebook->api('/me'); 
       } catch (FacebookApiException $e) { 
       //code to redirect to login url 
       // USECASE1 
       // use $facebook->getUser() one USECASE1 is over 
       // now the user info is generated properly 
       } 
      }     

所有时代的用户通过USECASE1会(但有一个空的窗口,因为用户登录和已验证的应用程序),即使他已经登录并且之前已经对应用程序进行了身份验证。

任何想法,为什么这种情况正在发生

回答

0

在你的代码,如果用户是找“USECASE1”,那么它表明“$我”被设定,因为它让你的try/catch。

使用$me = $facebook->getUser();不是测试用户是否已接受您的应用程序的权限。

我怀疑抛出'FacebookApiException'异常的原因是因为您还没有获得您的用户权限。

我建议你阅读的认证流程和示例PHP SDK认证流程,请访问以下链接:

http://developers.facebook.com/docs/reference/php/facebook-api/

http://developers.facebook.com/docs/authentication2/

+0

库尔顿嗨, 我忘了提及的是,USECASE1是也称为if块外部,通过日志我已经检查过,正在调用的USECASE1是否是块外的一个。所以,$我永远不会被设置。正如我所说的流程超出了if块,然后到USECASE1,然后$ facebook-> getUser()工作正常。 –