facebook login将代码作为查询字符串中的变量返回

时间:2013-04-15 07:30:07

标签: php facebook api

我在我的一个网站上使用Facebook登录使用sdk for PHP。

有时Facebook登录有效,有时却没有。

这是我的index.php:

/// fb login area.....
include("facebook/src/facebook.php");

$facebook = new Facebook(array(
  'appId'  => '159326560901256',
  'secret' => 'c6b30bd2f80747b64d5b1d15a3da9e9c',
));

$user = $facebook->getUser();

$loginUrl = $facebook->getLoginUrl(array(
  'scope' => 'email',
  'redirect_uri' => 'http://xyz.com/login_fb.php'
));

<a href="<?=$loginUrl?>"><img class="fb_img" 
  src="images/fb_logo.png" width="153" height="38" /></a> 

转到login_fb.php

https://www.facebook.com/dialog/oauth?client_id=123131231&redirect_uri=http%3A%2F%2Fxyz.com%2Flogin_fb.php&state=403bc8aaf9eaee4064e3cc27befc71ff&scope=email

现在登录login_fb.php我得到这个网址:

login_fb.php?code=ASA&S^&*A^S&*A^S&*^A&*ASUAUIYSUIYASIYAUSYUIASA

并在$user我得到0

/// code for login_fb.php
include("facebook/src/facebook.php");

$facebook = new Facebook(array(
  'appId'  => '159326560901256',
  'secret' => 'c6b30bd2f80747b64d5b1d15a3da9e9c',
));


// Get User ID
$user = $facebook->getUser();
if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } 
    catch (FacebookApiException $e) {
        error_log($e);
        $user = null;
    }

    $logoutUrl = $facebook->getLogoutUrl(array(
      'next' => 'http://minuteville.com/index.php?val=fblogout'
    ));

为什么不起作用?

2 个答案:

答案 0 :(得分:2)

在Facebook SDK中添加以下行并使用getAccessTokenFromCode, 问题可以解决。

acesss代码过期。因此,通过交换代码获取新的访问代码可以解决问题

$access_code = $facebook->getAccessTokenFromCode($_GET['code']);

答案 1 :(得分:1)

https://developers.facebook.com/docs/howtos/login/server-side-login/#step6

您应该能够使用code参数构建访问令牌以获取用户。这些都写在文档中。