DesarrolloLibre

Desarrollo Web, Android, juegos y mucho más

Categorias
23-03-2017

Ya hemos visto hasta ahora como realizar el login social con Twitter y Facebook en anteriores entradas:

Cómo se ha expresado en anteriores entradas, la idea de los ejemplos presentados para lograr el login social en las principales redes sociales es poder reutilizar el código en múltiples ambientes o framework de PHP, en este caso "adaptamos" los script para CodeIgniter, aunque como puedes ver, su integración es mínima y resulta muy intuitivo llevarlo a PHP puro y ya queda por tu parte adaptar el código presentado a tu Framework php preferido.

Descargando la librería

Antes que nada debemos descargar la librería, la más actual puedes encontrarla en el siguiente enlace:.

Github: Google Api PHP client

Para esta entrada estamos empleando una librería anterior que puedes descargar en el siguiente enlace:

Google Api PHP client.

En una posterior actualización de la esta entrada se actualizará la librería y se aplicarán los cambios pertinentes en caso de ser necesarios.

Instalar la librería en Codeigniter

La instalación es sumamente sencilla, basta con copiar el rar descomprimido anteriormente en la carpeta libraries quedando del a siguiente manera:

libraries/google-api-php-client

En nuestro controlador Social el cual es el que se ha empleado en posteriores entradas se realiza los includes pertinente:

include_once APPPATH . "libraries/google-api-php-client/Google_Client.php";
include_once APPPATH . "libraries/google-api-php-client/contrib/Google_Oauth2Service.php";

También podríamos instalar la API como una librería igual que hicimos con Facebook, la cual sería la más recomendada aunque se realizó de esta manera para explicar distintas opciones de instalar código de terceros en el framework de CodeIgniter.

Desarrollando el login social en CodeIgniter

Teniendo la librería descargada, instalada y configurada en nuestro proyecto CodeIgniter, ahora debemos de definir unas variables globales que contendrán las claves/key obtenidos desde la creación del proyecto en la Consola de desarrolladores de Google; dichos pasos los puedes ver en la última sección de esta entrada:

    // gplus
    public $GP_CLIENT_ID = '';
    public $GP_CLIENT_SECRET = '';
    public $GP_REDIRECT_URL = 'social/gmail';

Debemos de crear la URL que nos permitirá solicitar la autenticación para eso el siguiente código:

        // Google Client Configuration
        $gClient = new Google_Client();
        $gClient->setApplicationName('Titulo');
        $gClient->setClientId($this->GP_CLIENT_ID);
        $gClient->setClientSecret($this->GP_CLIENT_SECRET);
        $gClient->setRedirectUri(base_url() . $this->GP_REDIRECT_URL);
        $google_oauthV2 = new Google_Oauth2Service($gClient);
        $data['authUrl'] = $gClient->createAuthUrl();

Como vemos, creamos un objeto Google_Client() que nos permitirá establecer las claves del proyecto creado en la Consola de Desarrolladores de Google y creamos el enlace que nos permitirá solicitar la autenticación con $gClient->createAuthUrl();.

    // this function to handle getting all news
    function gmail() {
        // Include the google api php libraries
        // https://github.com/googleplus/gplus-verifytoken-php/blob/master/google-api-php-client/src/contrib/Google_Oauth2Service.php
        // Google Project API Credentials
        // Google Client Configuration
        $gClient = new Google_Client();
        $gClient->setApplicationName('Titulo');
        $gClient->setClientId($this->GP_CLIENT_ID);
        $gClient->setClientSecret($this->GP_CLIENT_SECRET);
        $gClient->setRedirectUri(base_url() . $this->GP_REDIRECT_URL);
        $google_oauthV2 = new Google_Oauth2Service($gClient);

        if ($this->input->get_post('code')) {
            $gClient->authenticate();
            $this->session->set_userdata('token', $gClient->getAccessToken());
            redirect(base_url() . $this->GP_REDIRECT_URL);
        }

        $token = $this->session->userdata('token');
        if (!empty($token)) {
            $gClient->setAccessToken($token);
        }

        if ($gClient->getAccessToken()) {
            $userProfile = $google_oauthV2->userinfo->get();

            $userId = $this->procesarUsuarioSocial('G' . $userProfile['id'], $userProfile['email']);

            $this->session->set_userdata(array(
                'nombre' => $this->crearPersonaSocial($userProfile['given_name'], $userProfile['family_name'], $userId),
                'id' => $userId,
                'auth_level' => 1,
                'avatar' => $userProfile['picture'],
                'social' => true
            ));

            redirect("/");

        } else {
            $data['authUrl'] = $gClient->createAuthUrl();
        }
    }

Esta última función es invocada una vez aceptada y procesada la petición de login social por el usuario (URL callback), en este punto lo importante es señalar que con la función $google_oauthV2->userinfo->get(); obtenemos los datos del usuario para su posterior validación, insertado, guardado en sesión, etc.

Creando la aplicación en la Consola de Desarrolladores de Google

Primero nos vamos a la página Consola de Desarrolladores de Google creamos nuestro proyecto y habilitados la Google+ API:

Una vez realizado esto, nos vamos a "Credenciales", indicamos la API a emplear y demás información básica de nuestro proyecto:

E indicamos la URL de nuestra página, que perfectamente puede ser alguna URL resuelta desde nuestro VirtualHost (local a nuestra red o máquina) o una URL accesible desde Internet y la URL de redireccionamiento, la cual es la página en donde se devuelve los datos de la autenticación:

Finalmente podemos obtener las credenciales de nuestro que empleamos para la login social vía Google plus.


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

Algunos artículos que te pueden interesar

Cómo publicar posts en Facebook de manera automatizada con PHP

Cómo publicar posts en Facebook de manera automatizada con PHP

Se explica cómo obtener un token de acceso que no expira para publicar posts en el muro de Facebook de manera automatizada.

Andrés Cruz 21-07-2016

Los Bundle para modularizar nuestros proyectos en Symfony

Los Bundle para modularizar nuestros proyectos en Symfony

Se explica en qué consiste y cómo emplear y crear los Bundle en Symfony.

Andrés Cruz 20-02-2017

Integer en PHP

Integer en PHP

Un entero o integer por definición es un número con signo sin parte decimal.

Andrés Cruz 17-08-2013