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

TCPDF: clase Oper Source para generar PDF con PHP

TCPDF: clase Oper Source para generar PDF con PHP

jQuery sharebox, plugin para compartir contenido

jQuery sharebox, plugin para compartir contenido

Algunos artículos que te pueden interesar

Mis librerías fundamentales al momento de crear un sistema en CodeIgniter

Mis librerías fundamentales al momento de crear un sistema en CodeIgniter

Se realiza un recopilatorio de las principales librerías para CodeIgniter usados por mi persona al momento de desarrollar la mayoría de los sistemas.

Andrés Cruz 30-10-2017

Elementos fundamentales para trabajar con CodeIgniter

Elementos fundamentales para trabajar con CodeIgniter

Hablaremos de las funciones show_404 para mostrar errores 404 personalizados,url_title para crear URIs limpias,html_escape para evitar la inyección de HTML, organizar los controladores en subcarpeta, como cargar múltiples librerías y/o helpers en una sola

Andrés Cruz 12-10-2017

Creando una plataforma de pago con PayPal y CodeIgniter (parte 1)

Creando una plataforma de pago con PayPal y CodeIgniter (parte 1)

Se explica cómo crear una plataforma de pago empleando PayPal con CodeIgniter, crear las cuentas y la librería de desarrollo para CodeIgniter.

Andrés Cruz 10-05-2016