2012-02-26 34 views
5

Truy cập API Facebook và tôi hơi bối rối về cách tiếp cận đúng. Tôi muốn người dùng bỏ qua đăng ký hoặc tự động đăng ký họ nếu họ đăng nhập bằng Facebook. Vì vậy, nếu họ đăng nhập vào Facebook, tôi thu thập id, email của họ và tạo một bản ghi trong bảng người dùng của tôi.Sử dụng Facebook PHP-SDK 3.x để đăng ký/đăng nhập người dùng với Codeigniter 2.1.0

Nếu id đã tồn tại trong bảng người dùng, họ bỏ qua đăng ký tự động và truy cập trực tiếp vào trang thành viên. Đây là mã của tôi cho đến nay (lấy từ ví dụ về PHP SDK của Facebook). Khi tôi chạy tập lệnh đăng ký, trang hiển thị dưới dạng trống, tôi không được chuyển hướng.

CHỈNH SỬA: dường như không đúng sau yêu cầu, nếu tôi sử dụng đoạn mã sau 'kiểm tra' không bao giờ được in.

EDIT: Tôi đang sử dụng Codeigniter và tập lệnh này là một phần của bộ điều khiển, điều đó có gây ra sự cố với yêu cầu không?

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

    } 
+0

Bạn đã thử yêu cầu với đường dẫn hệ thống tệp thay vì đường dẫn URL chưa? – BenOfTheNorth

Trả lời

12

Tôi đề nghị bạn đọc khung documentation. Thêm thư viện vào CodeIgniter là không phải là một nhiệm vụ khó khăn. Và thư viện Facebook cũng không ngoại lệ.

Dưới đây là một hội nhập nhanh chóng Tôi vừa mới đưa ra:

1.create một tập tin cấu hình: application/config/facebook.php

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

2.place các tập tin trong các thư viện sdk thư mục application/libraries/ và đổi tên facebook.php gửi đến Facebook.php và thay thế thẻ php bằng cách này:

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

3.trong bộ điều khiển tải cấu hình nộp và sau đó tải các thư viện Facebook:

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

Bây giờ trong phương thức khởi tạo, bạn vừa khởi tạo thư viện Facebook (SDK) và nó có thể được truy cập bằng cách sử dụng: $this->facebook.

Ghi chú:

  • Bạn luôn có thể sử dụng một thư viện hiện có, chỉ google it
  • Một thực tế phổ biến là để mở rộng các lớp điều khiển lõi và thêm thư viện khởi Facebook ở đó.
  • Hoặc tạo thư viện khác, mở rộng thư viện Facebook, tải tệp cấu hình ở đó và sau đó tự động tải thư viện mới này.
+1

Cảm ơn, điều đó đã xảy ra. Tôi có một số đọc để làm. – PhoenixDown

+0

Bạn được hoan nghênh! – ifaour

+0

+1 cho ví dụ đơn giản ở định dạng Codeigniter – Zabs

0

Sau khi nhận được $user, kiểm tra các thông số phiên với print_r($_SESSION). Sau đó, kiểm tra một số biến số theo if(isset($_SESSION['some session var'])). Nếu điều kiện này là đúng, hãy điều hướng đến trang chính của bạn với header("location:main.php"); exit;

0

Bạn có thể thử sử dụng tiện ích mở rộng của tôi http://github.com/deth4uall/Facebook-Ignited nó được thiết lập để hoạt động với Facebook. Chỉ cần cập nhật các tập tin cấu hình và nó sẽ cho phép bạn làm những gì bạn cần làm, cũng như một số phương pháp bổ sung mà tôi thêm bản thân mình.

0

không biết tại sao, nhưng nó luôn luôn chạy dòng này:

echo "<a href=\"{$this->facebook->getLoginUrl()}\">Login using Facebook</a>";

Đây là thông báo lỗi:

không thể kết nối để lưu trữ

Nhưng điều này làm việc.

Các vấn đề liên quan