Edición de «Ejemplo de OAuth en KumbiaPHP»

De KumbiaPHP Framework Wiki

Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 1: Línea 1:
{{cleanupbox
 
|image=[[Archivo:Import.png|40px]]
 
|texto ='''Este Artículo esta siendo revisado por los Kumbieros.'''<br />
 
<span style="font-size:90%">Puedes tomar la información que aqui se encuentra pero no nos hacemos responsable</span>
 
}}
 
 
 
==Introducción==  
 
==Introducción==  
 
'''Nota previa''' Este ejemplo fue tomado de la documentación oficial de [http://twitter.com Twitter] / [http://github.com/abraham/twitteroauth/ TwitterOAuth] y adaptado a la arquitectura MVC de KumbiaPHP de forma básica.  
 
'''Nota previa''' Este ejemplo fue tomado de la documentación oficial de [http://twitter.com Twitter] / [http://github.com/abraham/twitteroauth/ TwitterOAuth] y adaptado a la arquitectura MVC de KumbiaPHP de forma básica.  
  
 
Se ha vuelto común ver sitios webs que ofrecen sus servicios para usuarios utilizando métodos de autenticación bastante convencionales como [http://es.wikipedia.org/wiki/OAuth OAuth], OpenID, etc. para este ejemplo el enfoque estará sobre OAuth.
 
Se ha vuelto común ver sitios webs que ofrecen sus servicios para usuarios utilizando métodos de autenticación bastante convencionales como [http://es.wikipedia.org/wiki/OAuth OAuth], OpenID, etc. para este ejemplo el enfoque estará sobre OAuth.
 
  
 
== Requisitos ==
 
== Requisitos ==
 
Como este ejemplo se basa en twitter es primordial tener una cuenta creada en este sistema de bloging, si aún no tienes ya es hora que te [http://twitter.com registrates] en Twitter. y seas un seguidor(followers) de [http://twitter.com/KumbiaPHP @KumbiaPHP]
 
Como este ejemplo se basa en twitter es primordial tener una cuenta creada en este sistema de bloging, si aún no tienes ya es hora que te [http://twitter.com registrates] en Twitter. y seas un seguidor(followers) de [http://twitter.com/KumbiaPHP @KumbiaPHP]
  
Descargar la librería [http://github.com/abraham/twitteroauth/ TwitterOAuth], descomprimela y copia los ficheros '''OAuth.php''' y '''TwitterOAuth.php''' en ''/app/libs/'' de tu arbol de directorios de KumbiaPHP. '''Importante: La librería TwitterOAuth necesita que el PHP del servidor tenga soporte para las funciones de cURL.'''
+
Descargar la librería [http://github.com/abraham/twitteroauth/ TwitterOAuth], descomprimela y copia los ficheros '''OAuth.php''' y '''TwitterOAuth.php''' en ''/app/libs/'' de tu arbol de directorios de KumbiaPHP.
  
  
 
[http://twitter.com/apps Registra también tu aplicación], indicando que es de tipo de aplicación Navegador (Browser), indica el tipo de permiso que necesitas (ReadOnly o ReadWrite), y marca el checkbox final, para indicar que usaremos Twitter para hacer inicios de sesión.
 
[http://twitter.com/apps Registra también tu aplicación], indicando que es de tipo de aplicación Navegador (Browser), indica el tipo de permiso que necesitas (ReadOnly o ReadWrite), y marca el checkbox final, para indicar que usaremos Twitter para hacer inicios de sesión.
  
== Pasos previos ==
 
Debido a un problema de desbordamiento de entero en la funcion ''json_decode()'', hay que parchear la librería TwitterOAuth para que los id de los mensajes se traten correctamente.
 
  
Editar el fichero TwitterOAuth.php y sustituir
 
<source lang=php >
 
      return json_decode($response);
 
</source>
 
por
 
<source lang=php >
 
      return json_decode(preg_replace('/"id":(\d+)/', '"id":"$1"', $response));
 
</source>
 
en las funciones ''get()'', ''post()'' y ''delete()''.
 
[http://github.com/abraham/twitteroauth/issues#issue/11 Este fallo] ya era conocido por Abraham, el desarrollador de TwitterOAuth y le pasé el "parche" para que lo tuviera en cuenta. Aquellos que tengais PHP 5.3 podeis usar el parametro JSON_BIGINT_AS_STRING en la funcion ''json_decode()'', quedando así:
 
<source lang=php>
 
      return json_decode($response, false, 512, JSON_BIGINT_AS_STRING));
 
</source>
 
 
 
== Pasos ==
 
 
creamos un controlador, usando el codigo de la documentación de TwitterOAuth como base:
 
creamos un controlador, usando el codigo de la documentación de TwitterOAuth como base:
 
''app/controllers/oauth_controller.php''
 
''app/controllers/oauth_controller.php''
Línea 43: Línea 18:
 
<?php
 
<?php
 
Load::lib("TwitterOAuth");
 
Load::lib("TwitterOAuth");
class OAuthController extends AppController
+
class OAuthController extends ApplicationController
 
{
 
{
 
protected $consumerKey;
 
protected $consumerKey;
Línea 49: Línea 24:
 
protected $callBack;
 
protected $callBack;
  
public function before_filter() {
+
public function initialize() {
 
                 /* Esto es mio, ya que tengo los valores en la base de datos, lo dejo para servir de ejemplo
 
                 /* Esto es mio, ya que tengo los valores en la base de datos, lo dejo para servir de ejemplo
 
$rows = $this->Configuration->find("name LIKE '%oauth%' ORDER BY name ASC");
 
$rows = $this->Configuration->find("name LIKE '%oauth%' ORDER BY name ASC");
Línea 66: Línea 41:
 
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret']))  
 
if (empty($_SESSION['access_token']) || empty($_SESSION['access_token']['oauth_token']) || empty($_SESSION['access_token']['oauth_token_secret']))  
 
{
 
{
View::select(NULL, NULL);
+
$this->render(NULL);
return Router::redirect("oauth/_register");
+
$this->redirect("oauth/_register");
 
}
 
}
  
Línea 75: Línea 50:
 
/* If access tokens are not available redirect to connect page. */
 
/* If access tokens are not available redirect to connect page. */
 
if (empty($access_token['oauth_token']) || empty($access_token['oauth_token_secret'])) {
 
if (empty($access_token['oauth_token']) || empty($access_token['oauth_token_secret'])) {
header('Location: http://<tudominio>/oauth/_register/');
+
header('Location: http://twitbot.gmbros.net/oauth/_register/');
 
}
 
}
  
Línea 85: Línea 60:
 
   
 
   
 
if ($credentials->error) {
 
if ($credentials->error) {
$this->msg = $credentials->error."<br><br><a href='http://<tudominio>/oauth/_register'>Register now</a>";
+
$this->msg = $credentials->error."<br><br><a href='http://twitbot.gmbros.net/oauth/_register'>Register now</a>";
 
}
 
}
 
else {
 
else {
$this->msg = "Acceso confirmado, OAuth correcto. Bienvenido ".$credentials->screen_name.".<br><br><a href='http://<tudominio>/oauth/_logout'>Logout</a>";
+
$this->msg = "Acceso confirmado, OAuth correcto. Bienvenido ".$credentials->screen_name.".<br><br><a href='http://twitbot.gmbros.net/oauth/_logout'>Logout</a>";
 
}
 
}
 
}
 
}
Línea 127: Línea 102:
 
session_start();
 
session_start();
 
session_destroy();
 
session_destroy();
        View::select(NULL, NULL);
+
$this->render(NULL);
        return Router::redirect("oauth/index");
+
$this->redirect("oauth/index");
 
}
 
}
  
Línea 171: Línea 146:
  
  
Por último, creamos las vistas:
+
* Por último, creamos las vistas:
 
''views/oauth/index.phtml'':
 
''views/oauth/index.phtml'':
 
<source lang=php >
 
<source lang=php >
Línea 179: Línea 154:
 
''views/oauth/_register.phtml'':
 
''views/oauth/_register.phtml'':
 
<source lang=php >
 
<source lang=php >
<a href="http://<tudominio>/oauth/_redirect/"><img src="/img/lighter.png" alt="Sign in with Twitter"/></a>
+
<a href="http://twitbot.gmbros.net/oauth/_redirect/"><img src="/img/lighter.png" alt="Sign in with Twitter"/></a>
 
</source>
 
</source>
  
== Pruebas ==
 
Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://''<tudominio>''/oauth y probarlo. La primera vez se te pedirá autorizar a la aplicación, pero una vez hecho, ya no hará falta.
 
  
Puedes hacer distintas pruebas:
+
* Ya esta! Ahora ya puedes visitar la URL de tu controlador en http://''<tudominio>''/oauth y probarlo. La primera vez se te pedirá autorizar a la aplicación, pero una vez hecho, ya no hará falta.
# Cerrar la sesion de Twitter, cerrar el navegador, abrirlo y acceder a tu controlador. Veras que se te muestra el botón de iniciar sesión. Como la aplicación ya está autorizada, sólamente debes iniciar sesión en Twitter y se redirige de nuevo a tu controlador.
 
# Cerrar el navegador, iniciar Twitter y luego acceder a tu controlador. Se te muestra de nuevo el botón de iniciar sesión. Como la aplicación está autorizada y ya has iniciado sesión en Twitter, el inicio de sesión es automático sólo con pulsar el botón.
 
  
  
== Links ==
+
Para cualquier duda, podeis enviarme un email o buscarme por el IRC.
* [http://apiwiki.twitter.com/Twitter-API-Documentation API de Twitter]
 
* [http://github.com/abraham/twitteroauth/ TwitterOAuth]
 
  
 
Para cualquier duda, podeis enviarme un email o buscarme por el IRC.
 
  
 
Saludos,
 
Saludos,

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: