2012-02-26 10 views
5

Superare l'API di Facebook e sono un po 'confuso sull'approccio giusto. Voglio che gli utenti salgano la registrazione o li registrino automaticamente se accedono con Facebook. Quindi, se si collegano a Facebook, raccolgo il loro id, email e creo un record nella mia tabella utenti.Utilizzo di Facebook PHP-SDK 3.x per registrare/accedere utente con Codeigniter 2.1.0

Se esiste già un ID nella tabella utente, salta la registrazione automatica e passa direttamente alla pagina dei membri. Questo è il mio codice finora (tratto dall'esempio di PHP SDK di Facebook). Quando eseguo lo script di iscrizione la pagina si presenta vuota, non vengo reindirizzato.

EDIT: sembra fallire subito dopo la richiesta, se uso il seguente codice 'test' non viene mai stampato.

MODIFICA: sto usando Codeigniter e questo script fa parte di un controller, potrebbe causare un problema con il requisito?

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

Hai provato il requisito con un percorso del filesystem piuttosto che un percorso URL? – BenOfTheNorth

risposta

12

Ti suggerisco di leggere il framework documentation. L'aggiunta di una libreria a CodeIgniter è non un compito difficile. E la libreria di Facebook non fa eccezione.

Ecco una rapida integrazione che ho appena venuta in mente:

1.Creare un file di configurazione: application/config/facebook.php

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

2.place i file SDK nella cartella delle librerie application/libraries/ e rinominare il facebook.php file per Facebook.php e sostituire il tag php con questo:

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

3.in il carico di controllo della configurazione file e quindi caricare la libreria 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>"; 
     } 
    } 
} 

Ora, nel metodo di costruzione, si è appena inizializzato la libreria Facebook (SDK) e vi si può accedere tramite: $this->facebook.

Note:

  • si può sempre utilizzare una libreria esistente, basta google it
  • Una pratica comune è quella di estendere la classe Controller core e aggiungere l'inizializzazione della libreria Facebook lì.
  • Oppure creare un'altra libreria, estendere la libreria di Facebook, caricare lì il file di configurazione e quindi caricare automaticamente questa nuova libreria.
+1

Grazie, ha funzionato. Ho qualche lettura da fare. – PhoenixDown

+0

Siete i benvenuti! – ifaour

+0

+1 per un semplice esempio in formato Codeigniter – Zabs

0

Dopo avere ottenuto l'$user, controllare parametri della sessione con print_r($_SESSION). Successivamente, controlla alcune variabili per if(isset($_SESSION['some session var'])). Se questa condizione è vera, vai alla pagina principale con header("location:main.php"); exit;

0

È possibile provare a utilizzare la mia estensione http://github.com/deth4uall/Facebook-Ignited è impostato per funzionare con Facebook. Basta aggiornare il file di configurazione e questo ti permetterà di fare ciò che devi fare, così come alcuni metodi aggiuntivi che ho aggiunto io stesso.

0

non so perché, ma funziona sempre questa linea:

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

Questo è il messaggio di errore:

non poteva collegarsi ad ospitare

Ma questo ha funzionato.

Problemi correlati