PDA

Ver la versión completa : Script para login usuarios en foro phpbb3?



doble-h
26/01/2010, 23:28
buenas:

tengo la idea de hacer un script para hacer login o registrarse (que vaya a la pagina de registro) en un foro phpbb3, que sea una ventanita pequeña, que lo puedo poner en un iframe, o en una ventana flotante...

es posible? es dificil? lo que no quiero es que sea portal...

o se podria poner el bloque del portal de login en una web aparte?

saludos :brindis:

Bizkaitarra
26/01/2010, 23:56
Yo creo que tengo algo echo de eso en el curro. SI mañana me recuerdas vía mensaje privado te lo miro ¿ok?

doble-h
26/01/2010, 23:59
ooki, perecto te dejare un MP! Gracias :brindis:

GameMaster
27/01/2010, 00:03
El código del phpbb3 es bastante engorroso de modificar, pero claro que es posible, te creas tu pagina de login y le pasas los parametros despues a la de phpbb3, pero siempre acaba por dar trabajo y pequeños dolores de cabeza o cosas que despues surgen en el servidor que no funcionan y te hacen dar vueltas para encontrar la causa...

Bizkaitarra
27/01/2010, 09:11
Bueno te explico lo que tengo aunque me dado cuenta que no es exactamente lo que querías pero haber que puedes sacar de ello.

Yo lo que tuve que hacer es teniendo el login de unos usuarios ya realizado en una intranet, hacer que se logeen con dicho usuario en phpbb3.

Para ello tuve que hacer los siguientes pasos:
- Crear un nuevo método de logeo en /includes/auth
- Cambiar en la configuración (a traves del panel) el método de autentificación y ponerlo como mi autentificación
- En la página donde quieres poner el link al foro (desde la página digamos externa) crear un formulario oculto que pase por post los campos necesarios para el foro (te pongo el código que deberías de introducir)




//En el menu:
<li><a href="#" onclick="autologin();" >Foro</a></li>

//Debajo

<form action="./foro/ucp.php?mode=login" method="post" id="login" name="login">
<input type="hidden" tabindex="1" name="username" id="username" size="25" value=" <?php echo $user['login']; ?> " class="inputbox autowidth" />
<input type="hidden" tabindex="2" id="password" name="password" size="25" class="inputbox autowidth" value="<?php echo $user['pwd'];?>" />
<input type="hidden" name="sid" value="e20713a75f295282dfd8e1c7ef295355" />
<input type="hidden" name="login" tabindex="6" value="Identificarse" class="button1" />
<input type="hidden" name="intranet" tabindex="7" value="1" />
</form>
<script type="text/javascript">

function autologin(){
document.login.submit();
}
</script>




El código php que te pongo a continuación básicamente hace lo siguiente:

- Se conecta a la BBDD de la intranet para comprobar que el usuario introducido existe
- Si existe en la BBDD de la intranet pero no en la del foro crea el usuario en la del foro.
- Si existe en la BBDD de la intranet y en el foro actualiza la contraseña del foro para que sea la de la intranet (esto hacemos para mantener el cambio de contraseñas solo en la intranet)
- Comprueba que el usuario/pass es correcto en la BBDD del foro. Aquí tuvimos un problema. La intranet nos pasaba la contraseña encriptada en md5 por lo que en el where no teníamos que usar md5. Sin embargo, si un admin quiere logearse (que ya sabes que tiene que escribir la contraseña otra vez) o alguien se desloguea y quiere entrar directamente al foro tenemos que codificar en md5, por ello existen las dos clausulas en el where.
- Si tiene éxito devuelve lo que phpbb3 representa como éxito
- Si es fracaso pues lo mismo que el éxito



<?php


function login_intra ($username,$password ) {
global $db, $config;

//Definición de BBDD de la intranet (de la que estoy pillando el login)
$host_intra = "localhost";
$bd_intra = "mibbdd";
$user_intra = "bbdduser";
$pass_intra = "bbddpass";


//Nos conectamos a la BBDD de la intranet

$link2 = mysql_connect($host_intra, $user_intra, $pass_intra);
if (!$link2) {
//Hay que mirar este caso. Probablemente hacemos un die
die('Could not connect: ' . mysql_error());
}
mysql_select_db($bd_intra,$link2);

$potato = mysql_query("Select count(login) as total from empleados where login='".$username."'",$link2);

$total = mysql_fetch_array($potato);
//Comprobar si el usuario existe en la BBDD de la intranet
if ($total[0]==1) {
//El usuario existe en intranet
$query = mysql_query("Select login as login_intra,pwd as pwd_intra, email as email_intra from empleados where login='".$username."'",$link2);

$result = mysql_fetch_array($query);
extract($result);

//Comprobamos que el usuario existe en la BBDD del foro
$sql = 'SELECT username as login_foro, user_password as pwd_foro '
.' FROM ' . USERS_TABLE .
" WHERE username = '" . $username . "'"
;

$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$row) {
//echo "Tenemos que a�adir el usuario";
//Este usuario es nuevo en el foro. Lo a�adimos
$user_row = array(
'username' => $login_intra,
'user_password' => $pwd_intra,
'user_email' => $email_intra,
'group_id' => 2,
'user_lang' => 'es',
'user_type' => 0,
'user_regdate' => time(),
);
$user_id =="";
$user_id = user_add($user_row);
//echo "Tenemos un nuevo usuario con id: ".$user_id;
}
else {
//Si existe actualizamos contrase�a
if ($pwd_intra != $row['pwd_foro']) {
//echo "La contrase�a es diferente " . $pwd_intra . " frente a la del foro que es " . $row['pwd_foro'];
$sql = 'update '. USERS_TABLE .
' set '. USERS_TABLE . ".user_password ='". $pwd_intra ."'"
. ' where '. USERS_TABLE . ".username = '". $login_intra ."'";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
//echo "La contrase�a se ha actualizado";
}
}


}
else {
//El usuario no existe en la intranet, comprobamos de manera normal

}

//Ahora realizamos la comprobaci�n normal:
$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts
FROM ' . USERS_TABLE . "
WHERE username = '" . $username . "'" .
" and (user_password='" . $password . "'" .
" or user_password='" . md5($password) . "')";

$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row)
{
return array(
'status' => LOGIN_ERROR_USERNAME,
'error_msg' => LOGIN_ERROR_USERNAME,
'user_row' => array('user_id' => ANONYMOUS),
);
}
else {

return
array(
'status' => 3,
'error_msg'=> '',
'user_row'=> $row
);
}





}

?>

Malenko
27/01/2010, 09:26
Dale un vistazo a este link que es justo lo que pides:

http://www.forosdelweb.com/f121/login-sesion-sitio-con-phpbb3-pagina-externa-phpbb3-541462/

doble-h
27/01/2010, 10:51
estoy probando con el que a dicho malenko, pero el path no se que es xD

y luego cuando lo integro, me sale un recuadro en blanco, como si no hubiera encontrado nada, y dentro del login.php, e visto que hay esto http://www.tudominio.com/avatar-default.jpg

tengo que poner un avatar predeterminado? o se pondra el de cada user?

EDIT:

muchas gracias a los dos, pero ahora voy a probar otra cosa, crear el portal con solo noticias y login y ponerlo en el principal

gracias de nuevo :brindis: si no funciona probare esto xD