Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/10/2010, 14:26
Avatar de HiToGoRoShi
HiToGoRoShi
 
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
[ APORTE ] Login externo PHPBB3 con AJAX :o

Login externo PHPBB3 con AJAX
Luego de cranear un rato, pude ayar la solucion el problema en si no era el AJAX, sino tratar de entender que funcion realiza el logeo, y buscando en foros en INGLES pude encontrar la funcion para adaptarla a mi AJAX


Requerimientos:
- Jquery
- Saber algo de PHP

Explicacion
El ejercicio estara realizado netamente con JQuery por su facil uso de AJAX.

Crearemos 3 archivos:

login.view.html: este contendra nuestro codigo html para el formulario

Código HTML:
Ver original
  1. <label for="username">Usuario</label>
  2.   <input type="text" name="username" id="username /">
  3. <label for="password">Password</label>
  4.   <input type="password" name="password" id="password" />
  5.   <input type="submit" name="btnEnviar" id="btnEnviar" value="Enviar" />

phpbb.controller.php:

Código PHP:
Ver original
  1. <?php
  2. /**
  3. PHPBB3 :: AJAX LOGIN MOD
  4. Escript que permite validar si el usuario fue logeado o no, e imprimira un valor TRUE OR FALSE para que sean recogidos con ajax
  5. */
  6.  
  7. //Aqui va la ruta donde se encuentra ubicado nuestro foro
  8. $phpbb_root_path = 'NUESTRA DIRECCION DEL FORO';
  9.  
  10. switch($_POST['action'])
  11. {
  12.     define('IN_PHPBB', true);
  13.     $phpEx = substr(strrchr(__FILE__, '.'), 1);
  14.     include($phpbb_root_path . 'common.php');
  15.     // Start session management
  16.     $user->session_begin();
  17.     $user->setup();
  18.     $auth->acl($user->data);
  19.    
  20.         //Esto en phpbb es llenado con los datos del $_POST o $_GET, sin tener que llamarlo directamente
  21.     $username = request_var('username', '');
  22.     $password = request_var('password', '');
  23.        
  24.         //Esta es la funcion magica que nos permite hacer el login 
  25.     $auth->login($username, $password, true);
  26.        
  27.     //Luego hecho esto, hacemos un if a $user->data['is_registered'], si este bota TRUE es porque ha sido logeado, sino los datos fueron incorrectos
  28.     if($user->data['is_registered'])
  29.         print "TRUE";
  30.     else
  31.         print "FALSE"; 
  32.        
  33.     break;
  34. }
  35.  
  36. ?>


Basicamente usamos la funcion de phpBB que usa para logear, la cual es esta

Cita:
$auth->login($username, $password, true)
Como dije arriba, que phpbb recibe los DATOS get y post por una funcion propia de ellas, sin tener que llamarlos asi $_POST['username'], ellos usan esto

Cita:
request_var('username', '');
Asi que los parametros que enviaremos en nuestro formulario HTML, los input deben tener como nombre username y password

Ok, ahora vamos al javascript( Jquery )
Regresamos a nuestro login.view.html para modificar algunos detalles, tenemos que agregar la libreria de jquery, la bajamos de http://jquery.com/ y luego la insertamos a nuestro html, y creamos un nuevo archivo yo le puse de nombre phpbb.js

phpbb.js: este archivo contedra el siguiente codigo

Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.    
  3.         //Esto indica que sucedera algun evento, al hacer click a nuestro BOTON
  4.     $("#btnLogin").live('click',function(){
  5.                 //Aqui estamos llamando a nuestra funcion logearphpbb, y le estamos enviando 2 parametros, los cuales son los valores que tienen nuestros input (username,password)
  6.         logearphpbb($("#username").val(),$("#password").val());
  7.     })
  8.    
  9. /*Esta funcion le va a enviar parametros por AJAX a nuestro controller, si se dan
  10. cuenta son 3 los datos, la accion que se desea realizar, esto es muy importante
  11. porque si cambian el nombre no podra ejecutar ni un codigo, ya que nuestro
  12. controller esta recibiendo los datos de acuerdo a la accion que le enviemos
  13. usando un switch-case que vendria ser como un if-else.
  14. */
  15.     function logearphpbb(username,password)
  16.     {
  17.         $.post('controller/phpbb.controller.php',{
  18.                                //Enviando los parametros
  19.                 action: 'loginPHPBB',
  20.                 username: username,
  21.                 password: password,
  22.                 autologin: 'ON'}
  23.             ,function(data){
  24. /*Nuestro controller realizara una impresion (print), y la variable DATA lo va a
  25. capturar, luego de eso hacemos un if y apartir de aca depdenera de ustedes que quieran realizar*/
  26.                 if(data=='TRUE')
  27.                                     alert("Exito");
  28.                                 else
  29.                                     alert("Fracaso");
  30.  
  31.         })
  32.     }
  33. })

Nuestro controller respondera TRUE or FALSE en formato STRING, si es TRUE la session fue incializada, si es FALSE los datos etsan malos.


Cualquer duda o sugerencia/modificacion/aclarion/insulto por aqui mismo