0

所以我正在使用 Facebook 登录和身份验证构建一个应用程序。使用下面的代码一切都很好(根据文档)

require 'facebook-php-sdk/src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'YOUR_APP_ID',
  'secret' => 'YOUR_APP_SECRET',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

我的问题是如何判断用户是否已登录,而无需在其他地方再次执行上述所有操作。例如,在我看来,我如何能够快速测试用户是否登录?Facebook::getUser()如果它在我的 Codeigniter 应用程序中不起作用,我会简单地调用它。我在我看来尝试了下面的代码。

$user =  Facebook::getUser();

并得到错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: CI_Loader::$user

Filename: src/base_facebook.php

Line Number: 504


Fatal error: Call to undefined method CI_Loader::getUserFromAvailableData() in /home/syklone911/webapps/meme/application/libraries/facebook/src/base_facebook.php on line 509

有人可以对此有所了解吗?

4

3 回答 3

1

在application/config文件夹中创建一个新文件,并将其命名为facebook.php,内容如下:

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config['appId'] = 'your_app_id';
$config['secret'] = 'your_app_secret';

在application/libraries中创建一个文件夹,并将其命名为facebook,其中包含内容(facebook php SDK 文件):

  • base_facebook.php
  • Facebook.php注意:(将 facebook.php 重命名为 Facebook.php 并在第一行添加:

    if ( !defined('BASEPATH')) exit('不允许直接访问脚本');

  • fb_ca_chain_bundle.crt

当您想在任何控制器中加载库时,您只需执行以下操作:

$config = $this->load->config('facebook', TRUE);  
$this->load->library('facebook/facebook', $config);

在您看来要测试用户是否已登录:

$user = $this->facebook->getUser();  
if($user){
    try{
        $user_profile = $this->facebook->api('/me');
        $access_token = $this->facebook->getAccessToken();
    }catch (FacebookApiException $e) {
        $user = null;
    }
}
if($user){  
    //User is logged in via Facebook  
}else{  
    //User is not logged. Prompt the user to log in via Facebook  
    echo '<a href="'.$this->facebook->getLoginUrl().'">Login Via Facebook</a>';
}

就这样。

于 2013-01-06T19:39:36.663 回答
0

好吧,您需要将所需的 facebook 数据存储在某种会话变量中,以便您可以在整个应用程序中使用

和更好的清洁编码实践,您可能有带有会话检查的中间控制器 MY_Controller 以及用户是否登录并在中间控制器中设置超级对象

于 2013-01-06T08:08:29.143 回答
0

if($user)放置 之后if( session_id() ){} else { session_start() ; } 并且在每个页面的开头,您必须使用它if( session_id() ){} else { session_start() ; },无论您想在所有页面中使用什么数据,都应该将其存储在会话变量中,如下所示:$_SESSION['VARIABLE_NAME'] ='DATA TO STORE'这将使该数据在所有页面上保持活动状态。注意:您必须在要使用 GRAPH API 的每个页面上启动 facebook 类。IE require 'facebook-php-sdk/src/facebook.php'; $facebook = new Facebook(array( 'appId' => 'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET', ));

于 2013-01-06T09:29:59.907 回答