El inicio de sesión con la función LinkedIn hace que el sistema de inicio de sesión web se complete. Proporciona una forma fácil y rápida de iniciar sesión en la aplicación web sin crear una cuenta en esa aplicación web. Con el inicio de sesión de LinkedIn, los usuarios pueden iniciar sesión en su sitio web con su cuenta de LinkedIn sin registrarse en su sitio web. Nuestro tutorial anterior le mostró la integración de inicio de sesión de LinkedIn en PHP . En este tutorial, le mostraremos cómo integrar el sistema de inicio de sesión de LinkedIn en CodeIgniter.
Antes de comenzar a implementar el inicio de sesión de LinkedIn en CodeIgniter 3 utilizando OAuth Client Library, cree una aplicación de LinkedIn en el panel de la Red de Desarrolladores de LinkedIn y obtenga la Clave de API (ID de cliente) y el Secreto de API (Secreto de cliente). Deberá establecer URLs de redireccionamiento autorizados que serían las mismas que las URL del controlador de autenticación del usuario (http: // localhost / codeigniter / user_authentication /). Además, debe especificar la URL de redireccionamiento, la clave de API y el secreto de API en su script al momento de conectarse con la API de LinkedIn.
  • Cómo crear una aplicación de LinkedIn, ID de cliente y secreto de cliente
Una vez que se termina su creación aplicación LinkedIn, copie el ID de cliente y la clave secreta de cliente y ponerlos en la variable correspondiente en el guión.
Eche un vistazo a la estructura de archivos de Iniciar sesión con LinkedIn en CodeIgniter utilizando la biblioteca de cliente PHP.
codeigniter-linkedin-login-files-structure

Creación de tablas de base de datos

Para almacenar la información del perfil de LinkedIn, necesita crear una tabla en la base de datos. El siguiente SQL crea una userstabla con algunos campos obligatorios en la base de datos MySQL.
CREAR  TABLA ` usuarios ` (
  `id`  int ( 11 ) NOT NULL AUTO_INCREMENT,
  ` oauth_provider`  varchar ( 255 ) compilar utf8_unicode_ci NOT NULL ,
  `oauth_uid`  varchar ( 255 ) compilar utf8_unicode_ci NOT NULL ,
  ` first_name`  varchar ( 255 ) compilar utf8_unicode_ci NOT NULL ,
  `last_name`  varchar ( 255 ) COLLATE utf8_unicode_ci NOT NULL ,
  ` email` varchar ( 255 ) COLLATE utf8_unicode_ci NOT NULL ,
  `gender`  varchar ( 10 ) COLLATE utf8_unicode_ci NOT NULL ,
  ` locale`  varchar ( 10 ) COLLATE utf8_unicode_ci NOT NULL ,
  `picture_url`  varchar ( 255 ) COLLATE utf8_unicode_ci NOT NULL ,
  ` profile_url`  varchar ( 255 ) COLLATE utf8_unicode_ci NOT NULL ,
  `created` datetime NOT NULL ,
  ` modified` datetimeNO NULA ,
  CLAVE PRIMARIA ( `id` )
) MOTOR = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

Config

autoload.php: las
bases de datos y las bibliotecas de sesión son necesarias durante todo el proceso de inicio de sesión. Será una buena idea especificar estas bibliotecas en el autoload.phparchivo.
$ autoload [ ' library ' ] = array ( 'session' , 'database' );
linkedin.php:
Las variables de configuración de la API de LinkedIn se definen en este archivo. Debe especificar el ID de cliente ( linkedin_api_key), el Secreto de cliente ( linkedin_api_secret) y la URL de redireccionamiento ( linkedin_redirect_url) de acuerdo con sus credenciales de la aplicación de LinkedIn.
<? php defined ( 'BASEPATH' ) O exit ( 'No se permite el acceso directo al script' ); / * 
| -------------------------------------------------- ----------------- 
| Configuración de la API de LinkedIn 
| -------------------------------------------------- ----------------- 
| 
| Para obtener los detalles de una aplicación de Facebook, debes crear una aplicación de Facebook 
| en el panel de desarrolladores de Facebook (https://developers.facebook.com) 
| 
| linkedin_api_key cadena Su aplicación de LinkedIn ID de cliente. 
| linkedin_api_secret string Su aplicación de LinkedIn Secreto del cliente. 
| linkedin_redirect_url cadena URL para redireccionar a después del inicio de sesión. (no incluir URL base)
| linkedin_scope array Sus permisos requeridos. 
* / $ config [ 'linkedin_api_key' ] =  'InsertAppClientId' ; $ config [ 'linkedin_api_secret' ] =  'InsertAppClientSecret' ; $ config [ 'linkedin_redirect_url' ] =  'user_authentication /' ; $ config [ 'linkedin_scope' ] =  'r_basicprofile r_emailaddress' ;

Controladores (User_authentication.php)

Controlador User_Authentication contiene tres funciones, __construct()index(), y logout().
  • __construct() - El archivo de configuración de la API de LinkedIn y el modelo de usuario se cargan en este método.
  • index() - Las siguientes funcionalidades están implementadas en este método.
    • Conéctese con la API de LinkedIn utilizando la biblioteca cliente de LinkedIn, pase la información del perfil de usuario al modelo de usuario para insertarla en la base de datos.
    • Pase los datos del usuario a la vista y cargue la vista de detalles del perfil para el usuario autenticado.
    • Cargue la vista de inicio de sesión para el usuario no autenticado.
  • logout() - Este método elimina el estado de OAuth y los datos del usuario de la sesión y desconecta al usuario de su cuenta de LinkedIn.
<? php defined ( 'BASEPATH' ) O exit ( 'No se permite el acceso directo al script' ); 
la clase  User_Authentication  extiende  CI_Controller { 
    function  __construct () { 
        parent :: __construct (); 
        
        // Cargar linkedin config 
        $ this -> load -> config ( 'linkedin' ); 
        
        // Cargar modelo de usuario 
        $ esto -> cargar -> modelo ( 'usuario' ); 
    } 
    
índice de     función pública  () { 
        $ userData = array (); 
        
        // Incluir las bibliotecas de api php de linkedin 
        include_once  APPPATH . "bibliotecas / linkedin-oauth-client / http.php" ; 
        include_once  APPPATH . "bibliotecas / linkedin-oauth-client / oauth_client.php" ; 
        
        
        // Obtenga el estado y la información del usuario de la sesión 
        $ oauthStatus  $ this -> session -> userdata ( 'oauth_status' ); 
        $ sessUserData  $ this -> session -> userdata ( 'userData' ); 
        
        if (isset ( $ oauthStatus ) && $ oauthStatus  ==  'verified' ) { 
            // Información del usuario de la sesión 
            $ userData  $ sessUserData ; 
        } elseif ((isset ( $ _REQUEST [ "oauth_init" ]) &&  $ _REQUEST [ "oauth_init" ] ==  1 ) || (isset ( $ _REQUEST [ 'oauth_token' ]) && isset ( $ _REQUEST [ 'oauth_verifier' ]) )) { 
            $ client  = new  oauth_client_class ; 
            $ client -> client_id  $ this -> config ->'linkedin_api_key' ); 
            $ client -> client_secret  $ this -> config -> item ( 'linkedin_api_secret' ); 
            $ cliente -> redirect_uri  base_url (). $ this -> config -> item ( 'linkedin_redirect_url' ); 
            $ client -> scope  $ this -> config -> item ( 'linkedin_scope' ); 
            $ cliente -> depurar  falso ;
            $ cliente -> debug_http  true ; 
            $ application_line  __LINE__ ; 
            
            // Si el éxito retornos de autenticación 
            si ( $ éxito  $ cliente -> Inicializar ()) { 
                if (( $ éxito  $ cliente -> Proceso ())) { 
                    si ( strlen ( $ cliente -> authorization_error )) { 
                        cliente $ -> error  $ cliente -> permission_error ; 
                        $ exito  falsa ; 
                    } elseif ( strlen ( $ client -> access_token )) { 
                        $ success  $ client -> CallAPI ( 'http://api.linkedin.com/v1/people/~:(id,email-address,first-name, apellido, ubicación, imagen-url, público-perfil-url, formato-nombre) ' 
                        ' GET ' , 
                        matriz ( ' formato ' => ' json ' ), 
                        matriz ( ' FailOnAccessError ' => verdadero ),  $ userInfo );


                $ cliente -> Finalizar ( $ éxito ); 
            } 
            
            if ( $ client -> exit ) salir; 
    
            if ( $ success ) { 
                // Preparando datos para la inserción de la base de datos 
                $ first_name  =! empty ( $ userInfo -> firstName )? $ userInfo -> firstName : '' ; 
                $ last_name  =! empty ( $ userInfo -> lastName )? $ userInfo -> lastName : '' ; 
                $ userData  = array (
                    'oauth_provider' =>  'linkedin' , 
                    'oauth_uid'      =>  $ userInfo -> id , 
                    'first_name'      =>  $ first_name , 
                    'last_name'      =>  $ last_name , 
                    'email'          =>  $ userInfo -> emailAddress , 
                    'locale'          =>  $ userInfo -> ubicación -> nombre , 
                    'profile_url'      =>  $ userInfo -> publicProfileUrl , 
                    'picture_url'      => $ userInfo ->pictureUrl 
                ); 
                
                // Insertar o actualizar datos de usuario 
                $ userID  $ this -> user -> checkUser ( $ userData ); 
                
                // Almacena el estado y la información del perfil del usuario en la sesión 
                $ this -> session -> set_userdata ( 'oauth_status' , 'verified' ); 
                $ this -> session -> set_userdata ( 'userData' , $ userData ); 
                
                // Redirige al usuario de nuevo a la misma 
                redirección ( '/ user_authentication' ); 

            }más{
                 $ data [ 'error_msg' ] =  'Ocurrió algún problema, ¡inténtelo de nuevo más tarde!' ; 
            } 
        } elseif (isset ( $ _REQUEST [ "oauth_problem" ]) &&  $ _REQUEST [ "oauth_problem" ] <>  "" ) { 
            $ data [ 'error_msg' ] =  $ _GET [ "oauth_problem" ]; 
        } else { 
            $ data [ 'oauthURL' ] =  base_url (). $ esto -> config -> artículo ( ''? oauth_init = 1' ; 
        } 
        
        $ data [ 'userData' ] =  $ userData ; 
        
        // Cargar inicio de sesión y vista de perfil 
        $ this -> load -> view ( 'user_authentication / index' , $ data ); 
    } 

    función pública  logout () { 
        // Desactivar token y datos de usuario de la sesión 
        $ this -> session -> unset_userdata ( 'oauth_status' ); 
        $ this -> session -> unset_userdata ( 'userData' );
        
        // Destruye la sesión completa 
        $ this -> session -> sess_destroy (); 
        
        // Redireccionar a la página de inicio de sesión 
        redirect ( '/ user_authentication' ); 
    } 
}

Bibliotecas

La biblioteca de clientes de LinkedIn OAuth se utiliza para conectarse con la API de LinkedIn e integrar el sistema de inicio de sesión con LinkedIn. El directorio linkedin-oauth-client / contiene las bibliotecas de cliente de PHP necesarias para la autenticación.

Modelos (User.php)

El método checkUser () del modelo de usuario utilizado para insertar o actualizar la información del perfil de usuario en la base de datos.
<? php  if (!  defined ( 'BASEPATH' )) exit ( 'No se permite el acceso directo al script' ); 
clase de  usuario  se extiende  CI_Model { 
    función  __construct () { 
        $ this -> nombreTabla  'usuarios' ; 
        $ this -> primaryKey  'id' ; 
    } 
    función pública  checkUser ( $ data  = array ()) { 
        $ this -> db -> select ( $ this -> primaryKey );
        $ this -> db -> from ( $ this -> tableName ); 
        $ this -> db -> where (array ( 'oauth_provider' => $ data [ 'oauth_provider' ], 'oauth_uid' => $ data [ 'oauth_uid' ])); 
        $ prevQuery  $ this -> db -> get (); 
        $ prevCheck  $ prevQuery -> num_rows (); 
        
        si ( $ prevCheck  0 ) {
            $ prevResult  $ prevQuery -> row_array (); 
            $ datos [ 'modificado' ] =  fecha ( "Ymd H: i: s" ); 
            $ update  $ this -> db -> update ( $ this -> tableName , $ data , array ( 'id' => $ prevResult [ 'id' ])); 
            $ userID  $ prevResult [ 'id' ]; 
        } else { 
            $ data [ 'created' ] =  date ("Ymd H: i: s" ); 
            $ datos [ 'modificado' ] =  fecha ( "Ymd H: i: s" ); 
            $ insert  $ this -> db -> insert ( $ this -> tableName , $ data ); 
            $ userID  $ this -> db -> insert_id (); 
        } 

        devolver  $ userID ? $ userID : FALSE ; 
    } 
}

Vistas (user_authentication / index.php)

Si el usuario ya inició sesión con su cuenta de LinkedIn, se mostrarán los detalles del perfil; de lo contrario, se mostrará el botón Iniciar sesión con LinkedIn.
<? php if (! empty ( $ error_msg )) { 
    echo  '<p class = "error">' . $ error_msg . '</p>' ;    
} 

if (! empty ( $ userData )) {  ?> 
    < div  class = "login-form" >
        < div  class = "head" >
            < img  src = " <? php  echo  $ userData [ 'picture_url' ];  ?> "  alt = "" />
        </ div >
        < div  class = "content" >
        < li >
            < p > <? php  echo  $ userData [ 'first_name' ]. '' . $ userData [ 'last_name' ]; ?> </ p >
        </ li >
        < li >
            < p > <? php  echo  $ userData [ 'email' ]; ?> </ p >
        </ li >
        < li >
            < p > <? php  echo  $ userData [ 'locale' ]; ?> </ p >
        </ li >
        < div  class = "foot" >
            < Un  href = " <php?  Eco  base_url (). 'User_authentication / cierre de sesión' ?> " > Salir </ una >
            < Un  href = " <? Php?  Echo  $ userData [ 'PROFILE_URL' ];  ?> "  Target = "_blank" > Ver perfil </ a >
            < div  class = "clear" > </ div >
        </ div >
        </ div >
    </ Div >
 <? Php } else { 
    echo  '<div class = "linkedin_btn"> <a href="'. $oauthURL.'"> <img src = "' . Base_url (). 'Assets / images / signo -in-with-linkedin.png "/> </a> </div> ' ; } ?>

Conclusión

¡Eso es suficiente! Ahora ejecute la URL de autenticación de la aplicación (http: // localhost / codeigniter / user_authentication /) en el navegador y verifique el inicio de sesión con LinkedIn en CodeIgniter. Todos los archivos, incluida la Biblioteca OAuth Client de LinkedIn, se incluyen en el paquete de código fuente, lo descargan y colocan los archivos en la aplicación CodeIgniter.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.