Saludos amigos esta vez crearemos un login con google php mysql , crearemos una variable de sesión para ser usada en nuestra web,
a la vez que registraremos al usuario de google account
dentro de nuestra base de datos, cabe recalcar que esta publicación es una
actualización de iniciar sesión con google php mysql
esta vez utilizaremos la estructura MVC permitiendonos tener una mejor organización de los archivos, en esta actualización se está usando autenticación
OAuth 2.0
Este es un proceso complejo que involucra varias solicitudes de intercambio de datos entre su servidor y Google.
El uso de este sistema de inicio de sesión/registro puede simplificar las cosas tanto para usted como para sus usuarios.
Estos son algunos de los beneficios:
No es necesario crear y validar formularios de registro e inicio de sesión;
No necesita la función «Olvidé mi contraseña»;
El Flujo de inicio de sesión/registro es muy simplificado: obtienes el correo electrónico, el nombre y la foto de la persona con solo un clic;
Google ya ha validado el correo electrónico, por lo que no tiene que enviar un mensaje de validación.
Gran seguridad por parte de Google.
Por supuesto, esto solo funcionará si la persona tiene una cuenta de Google activa.
Antes de comenzar necesitará
Acceder a su cuenta de google y crear una aplicación a travéz de la consola de google
Cree un proyecto, vaya a crear credenciales ID de cliente de Oauth
y obtenga las credenciales que le otorga google para poder
ser usados en su sistema de login/registro luego vaya a pantalla de consentimiento de Oauth y llene los datos requeridos.
La estructura es la siguiente:
Archivos a utilizar
voy a publicar los archivos mas importantes con su documentación el resto de archivos los van a encontrar en la descarga,
la demostración se encuentra al final de la publicación.
- index.php
- config.php
- controller/index.php
- model/idiorm.php
- public/SetUp.php
- view/index.php
- index.php
La salida de datos es la siguiente:
Nótese cómo google proporciona datos al usuario de las políticas y condiciones del sitio, las cuales deberemos proporcionar a google una vez creando las credenciales.
index.php
Se convierte en el front de la página y se va a encargar de mostrar los controladores
que a su vez se encargarán de mostrar las vistas.
//ext file $ext = substr(strrchr(__FILE__, '.'), 1); /** Define ROOT_PATH para directorio app */ if ( ! defined( 'ROOT_PATH' ) ) { define( 'ROOT_PATH', dirname(__FILE__) . '/' ); } //requerimos la configuracion del host require ( ROOT_PATH . 'config.php' ); // requerimos las librería idiorm con sentencias preparadas en PDO require ( ROOT_PATH . 'model/idiorm.php' ); //requerimos SetUp.php require ( ROOT_PATH . 'public/SetUp.php' ); //iniciamos los controladores if(isset($_GET['view'])) { if(file_exists( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'. $ext )) { include( ROOT_PATH . 'controller/' . strtolower($_GET['view']) .'.'. $ext ); } else { //mostarmos una página de error si el controlador no existe include( ROOT_PATH.'controller/404.php'); } } else { //mostamos el controlador index por defecto include( ROOT_PATH.'controller/index.php'); } //end front
config.php
Aqui cargaremos los datos de configuración del host
estos a su vez los almacenamos en constantes a ser usadas y recorridas por todo el sitio.
/** El nombre de tu base de datos */ define( 'DB_NAME', 'database' ); /** Tu nombre de usuario de MySQL */ define( 'DB_USER', 'user' ); /** Tu contraseña de MySQL */ define( 'DB_PASS', 'password' ); /** Host de MySQL (es muy probable que no necesites cambiarlo) */ define( 'DB_HOST', 'localhost' ); /** Codificación de caracteres para la base de datos. */ define( 'DB_CHARSET', 'utf8mb4' );
controller/index.php
Este es el controlador que va a mostrar la página principal. si no se a iniciado sesión el
usuario verá un botón de inicio de sesión , caso contrario estará logueado y mostrará los datos del usuario.
Cabe recalcar que aquí el usuario, es un usuario que ya está verificado por eso no necesitamos verificar por
email de validación sus datos. Para esta demostración solo se mostrará el nombre y cuando fué su registro en el sistema
// creamos una nueva instancia de Google API client $client = new apiClient(); $client->setApplicationName("demoblogueroec"); // Configuración de la aplicación los datos los obtendremos de SetUp.php $client->setClientId($client_id); $client->setClientSecret($client_secret); $client->setDeveloperKey($api_key); $client->setRedirectUri($redirect_url); $client->setApprovalPrompt(false); $oauth2 = new apiOauth2Service($client); // una redireccion de google, con un codigo temporal if (isset($_GET['code'])) { //Este método obtendrá el token de acceso real de Google, // para que podamos solicitar información del usuario $client->authenticate(); // Obtenemos datos de usuario y lo almacenamos en la var $info $info = $oauth2->userinfo->get(); // buscamos este usuario en la base de datos con el modelo base idiorm.php //lo almacenamos en la var $person $person = ORM::for_table('google_users')->where('email', $info['email'])->find_one(); if(!$person){ // usuario no encontardo. Registramos! $person = ORM::for_table('google_users')->create(); // Configuramos propiedades que se insertarán en la base de datos //aray de database $person->email = $info['email']; $person->name = $info['name']; //google utiliza una picture automática con la primera letra del nombre de usuario //creo que esto no es necesario pero por como no queremos errores lo condicicionamos. if(isset($info['picture'])){ // Si el usuario ha establecido una foto pública de la cuenta de Google $person->photo = $info['picture']; } else{ // caso contrario usamos el predeterminado del sistema $person->photo = 'view/assets/img/usuario.jpg'; } // grabamos al usuario en la dB $person->save(); } // guaradamos la sesion de usuario $_SESSION['demo_sesion_google'] = $person->id(); // redireccionamos a la url especificada header("Location: $redirect_url"); exit; } $person = null; //requerimos el header cargamos template html require_once('view/inc/header.php'); if(isset($_SESSION['demo_sesion_google'])){ // obtenemos datos de usuario de la base de datos con el id del usuario de google session $person = ORM::for_table('google_users')->find_one($_SESSION['demo_sesion_google']); //mostramos la vista index.php y pasamos la var $person para ser mostardo // cabe recalcar que con find_one() solo vamos a buscar una fila que coincida con el email buscado require_once('view/index.php'); }else{ // si no se a iniciado la sesión mostramos el botón de google require_once('view/inc/nosesion.php'); } // requerimos el footer casi no hay mucho que mostrar require_once('view/inc/footer.php');
model/idiorm.php
Es una librería php con sentencias preparadas PDO listas para ser usadas
véase en https://github.com/j4mie/idiorm, es ligero y rápido.
public/setup.php
Carga la configuración y las credenciales creadas en google console
/**************Google API****************/ // Apis google require_once 'sdk-google/apiClient.php'; require_once 'sdk-google/contrib/apiOauth2Service.php'; // Google API. obtenemos configuraciones de https://code.google.com/apis/console/ $redirect_url = 'https://www.domain.com/'; // redirect url debe ser la misma configuarada en google console $client_id = ''; //cliente id $client_secret = ''; // clien secret $api_key = ''; //api key 1 /************end google api***************/
view/index.php
Aquí se cargará la información del usuario una vez que se haya iniciado la sesión.
//mostarmos información de usuario con la variable $person y el campo de la base de datos. <?php echo $person->photo; ?>
view/inc/nosesion.php
Aquí se mostrará el botón de inicio de sesión con un enlace obtenido de la configuraciones de google.
tabla.sql
Tabla usada para esta demostración
CREATE TABLE `google_users` ( `id` int(10) UNSIGNED NOT NULL AUTOINCREMENT PRIMARY KEY, `email` varchar(128) COLLATE utf8_unicode_ci NOT NULL UNIQUE KEY, `name` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `photo` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `registered` timestamp NOT NULL DEFAULT current_timestamp() ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Espero que este login con google php mysql les sirva a la vez como registro dentro de sus tablas usenlon en sus futuras publicaciones .
Cualquier duda estaremos a gusto en responderle.