Login Social en Twitter con PHP-CodeIgniter 3 y la Twitteroauth

23-02-2017 - Andrés Cruz

Login Social en Twitter con PHP-CodeIgniter 3 y la Twitteroauth

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos.

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

Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.

Conozca nuestros cursos sobre Laravel, CodeIgniter, Flutter, Electron, Django, Flask y muchos más!

Ver los cursos
¡Hazte afiliado en Gumroad!

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
!Web Alojada en Hostinger!