dongxing2015 2012-02-26 15:17
浏览 85
已采纳

使用Facebook PHP-SDK 3.x向Codeigniter 2.1.0注册/登录用户

Going over the Facebook API and I'm a bit confused on the right approach. I want users to skip registration, or auto-register them if they sign in with Facebook. So if they sign into Facebook I collect their id, email and create a record in my user table.

If an id exists already in the user table they skip the auto-registration and go directly to the members page. This is my code so far (taken from Facebook's PHP SDK example). When I run the signup script the page shows up as blank, I do not get redirected.

EDIT: seems to be failing right after the require, if I use the following code 'test' never gets printed.

EDIT: I'm using Codeigniter and this script is part of a controller, would that cause a problem with the require?

require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php';
echo "test";

-

public function signup()
    {   
        require 'http://localhost/facebook-php-sdk-6c82b3f/src/facebook.php';

        // Create our Application instance (replace this with your appId and secret).
        $facebook = new Facebook(array(
          'appId'  => 'xxxxxxxxxxxxxxx',
          'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
        ));

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

        // We may or may not have this data based on whether the user is logged in.
        //
        // If we have a $user id here, it means we know the user is logged into
        // Facebook, but we don't know if the access token is valid. An access
        // token is invalid if the user logged out of Facebook.

        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;
            }
        }

        // Login or logout url will be needed depending on current user state.
        if ($user)
        {
            $logoutUrl = $facebook->getLogoutUrl();
        }
        else
        {
            $loginUrl = $facebook->getLoginUrl(array('scope' => 'email'));
            redirect($loginUrl);
        }

        print_r($user_profile);


        $this->load->model("user_model");
        $privileges = 1;
        $loginLocation = ip2long($_SERVER['REMOTE_ADDR']);
        $active = 1;
        $this->user_model->add_user($user_profile->id, $user_profile->name, $user_profile->email, $loginLocation, $privileges, $active);

    }
  • 写回答

4条回答 默认 最新

  • doulai7239 2012-02-26 16:24
    关注

    I suggest you read the framework documentation. Adding a library to CodeIgniter is not a hard task. And Facebook library is no exception.

    Here's a quick integration I've just come up with:

    1.create a config file:application/config/facebook.php

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    $config['appId'] = 'app_id';
    $config['secret'] = 'app_secret';
    

    2.place the sdk files in the libraries folder application/libraries/ and rename the facebook.php file to Facebook.php and replace the php tag with this:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    

    3.in your controller load the config file and then load the Facebook library:

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Welcome extends CI_Controller {
    
        public function __construct()
        {
            parent::__construct();
            // Your own constructor code
            $CI = & get_instance();
            $CI->config->load("facebook",TRUE);
            $config = $CI->config->item('facebook');
            $this->load->library('facebook', $config);
        }
    
        public function index()
        {
            $user = $this->facebook->getUser();
            if($user) {
                try {
                    $user_info = $this->facebook->api('/me');
                    echo '<pre>'.htmlspecialchars(print_r($user_info, true)).'</pre>';
                } catch(FacebookApiException $e) {
                    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
                    $user = null;
                }
            } else {
                echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>";
            }
        }
    }
    

    Now in the constructor method, you have just initialized the Facebook library (sdk) and it can be accessed by using: $this->facebook.

    Notes:

    • You can always use an existing library, just google it
    • A common practice is to extend the core Controller class and add the Facebook library initialization there.
    • Or create another library, extend the Facebook library, load the config file there and then autoload this new library.
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试