Login Social en Twitter con PHP-CodeIgniter 3 y la Twitteroauth
- Andrés Cruz
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:
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:
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");
}
}
}
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter