DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
23-02-2017

Hace varias entradas anteriores vimos hacer el login social con HybridAuth en donde vimos como obtener los datos de una cuenta social como Google Plus, Facebook, Twitter, etc a través de una librería.

El problema de emplear este tipo de librerías es que cada vez se hace más difícil conseguir una librería actualizada sumado al hecho que la APIs las redes sociales más famosas como Twitter, Facebook y Google Plus actualizan sus APIs regularmente y con esto sus librerías propias PHP en la que se basan estas librerías de autenticación de redes sociales; otro problema que trae es que cuando queremos adaptarla a algunos framework como CodeIgniter, Symfony o Zend generalmente no es sencillas su integración salvo que los mismos desarrollen librerías personalizadas para estos sitios y mucho menos podemos emplear una librería en común para frameworks distintos, y esto es el caso de hybridauth.

La mejor solución que podemos hacer si queremos tener una librería que podamos mantener sin mucho esfuerzo, que podamos exportar a distintos framework y que sea mucho más personalizable es que nosotros mismos realicemos el proceso de login con las librerías PHP que ofrecen las redes sociales con las que queremos trabajar; que son generalmente Twitter, Facebook y Google Plus y de allí la razón del porque en la entrada se colocó como parte del título PHP-CodeIgniter y no simplemente PHP, ya que no es un desarrollo que se adapte solo con CodeIgniter, si lo al contrario, es un desarrollo para PHP puro que llevamos a CodeIgniter.

Login con Twitter en CodeIgniter

Como ya debes saber a esta altura si has leído las anteriores entradas; primero debes Crear la aplicación en la plataforma de Twitter cuyos pasos estan señalados en la entrada anterior.

Ahora se va a explicar como realizar el login social con Twitter empleando la librería TwitterOAuth que podemos obtener en el siguiente enlace:

TwitterOAuth

Cómo puedes darte cuenta, si realizas una rápida visualización al a página, la librería no es específica para el framework CodeIgniter; es para proyectos en PHP en general o como se dice coloquialmente PHP puro, pero esto no significa que no podamos emplearlo en un proyecto con CodeIgniter.

Se decidió emplear una versión anterior de la librería la cual puedes conseguir en el siguiente enlace ya que la misma tiene menos componentes y funciona como se esperaría, pero el código para la conexión es exactamente el mismo.

Una vez descargada la librería anterior la copiamos dentro de la carpeta library de nuestro proyecto CodeIgniter:

importanto como librería twitterauth

Ahora crearemos un controlador que llamaremos Social.php; realizamos un include de la librería que copiamos anteriormente:

// Twitter
include_once APPPATH . "libraries/TwitterOAuth/twitteroauth.php";

Y con esto tenemos nuestro controlador listo para emplear el login social con Twitter; ahora definimos unas variables globales que nos permitirán emplear las claves de manera global facilitando el proceso dentro del controlador:

    public $TWITTER_CONSUMER_KEY = 'XXX';
    public $TWITTER_CONSUMER_SECRET = 'XXX';
    public $TWITTER_OAUTH_CALLBACK = 'social/twitter';

Este código es el que se encarga de crear el enlace o la URL que debemos imprimir en nuestra vista, además de establecer los tokens en sesión para más adelante suministrarse a Twitter junto con la verificación de credenciales:

    function index() {

        // Twitter Client Configuration
        $connection = new TwitterOAuth($this->TWITTER_CONSUMER_KEY, $this->TWITTER_CONSUMER_SECRET);
        $request_token = $connection->getRequestToken(base_url() . $this->TWITTER_OAUTH_CALLBACK);

        //Received token info from twitterauthUrlTwitter
        $this->session->set_userdata('token', $request_token['oauth_token']);
        $this->session->set_userdata('token_secret', $request_token['oauth_token_secret']);

        //Any value other than 200 is failure, so continue only if http code is 200
        if ($connection->http_code == '200') {
            //redirect user to twitter
            $data['authUrlTwitter'] = $connection->getAuthorizeURL($request_token['oauth_token']);
        } else {
            echo "Error URL Twitter";
        }
    }

La función de callback, o la que recibe la respuesta una vez enviada la solicitud a Twitter:

    function twitter() {

        //Successful response returns oauth_token, oauth_token_secret, user_id, and screen_name
        $connection = new TwitterOAuth($this->TWITTER_CONSUMER_KEY, $this->TWITTER_CONSUMER_SECRET, $this->session->userdata('token'), $this->session->userdata('token_secret'));
        $access_token = $connection->getAccessToken($this->input->get_post('oauth_verifier'));
        $this->session->set_userdata('access_token', $access_token);

        if ($this->session->userdata('token') == $this->input->get_post('oauth_token')) {

            if ($connection->http_code == '200') {
                $userProfile = $connection->get('account/verify_credentials');

                $this->session->set_userdata(array(
                    'email' => null,
                    'nombre' => $userProfile->name,
                    'id' => $userProfile->id_str,
                    'auth_level' => 1,
                    'avatar' => $userProfile->profile_image_url,
                    'social' => true
                ));

                redirect("/app");
            }
        }
    }

Publicidad

Give me for a beer!

Algunos recursos que te pueden interesar

API REST en CodeIgniter

API REST en CodeIgniter

InstaStream: plugin para mostrar imágenes desde Instagram

InstaStream: plugin para mostrar imágenes desde Instagram

jQuery sharebox, plugin para compartir contenido

jQuery sharebox, plugin para compartir contenido

Algunos artículos que te pueden interesar

Upload de archivos con Codeigniter

Upload de archivos con Codeigniter

En este artículo veremos como hacer un uploads o cargar archivos en CodeIgniter.

Andrés Cruz 28-04-2014

Cargar de archivos con Codeigniter y Dropzone

Cargar de archivos con Codeigniter y Dropzone

Se explica cómo realizar la carga de archivos en CodeIgniter empleando el plugin Dropzone, manejo de eventos, errores y parámetros de configuración.

Andrés Cruz 21-08-2017

Instalar Zend Framework y Zend Tool en Linux

Instalar Zend Framework y Zend Tool en Linux

En esta entrada veremos como instalar Zend Framework en Linux y Zend Tool en un ambiente Linux.

Andrés Cruz 06-08-2013