Login Social con la SDK de Google con PHP-CodeIgniter 3

- Andrés Cruz

Login Social con la SDK de Google con PHP-CodeIgniter 3

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 de Google API client

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 (google api console)

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.

Con esto tenemos todo listo para lograr el login social con Google y debemos de colocar estos parámetros en el código PHP anterior; recuerda que esta librería y está el contenido entrada la puedes emplear para realizar la autenticación con PHP nativo o puro.

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.