Para quien no lo conozca, phpBB es uno de los sistemas de foros más populares usado en internet.
Mantenido por la comunidad es gratuito y cuenta con un gran número de plantillas (templates) gratuitas que podemos descargarnos, personalizar y usar para nuestros foros, aunque adolece de la falta de plugins y una documentación que nos haga la vida más fácil el desarrollo de dichos plugins o su integración con otros sistemas o webs propias.
Estos días he estado ayudando a mi amigo Oscar a montar y personalizar el nuevo foro para su proyecto: EscuderiasGP ; un completo simulador de gestión de un equipo de Fórmula 1 con el que podemos tomar el mando de una escudería y mejorarla para ganar carreras y campeonatos.
Una de las cosas que me pidió, después de haber montado el foro y haber personalizado una plantilla para hacerla más acorde a los colores de la web principal, ha sido la posibilidad de migrar sus usuarios desde su web a la base de datos del foro y poder realizar un autologin para que los usuarios no tengan que validarse de nuevo.
Para ello, y tras investigar por los foros de phpBB y ver algunos ejemplos propuestos, he conseguido una página en PHP que nos permite realizar el login usando el propio sistema implementado por el foro, registrando la sesión tras pasar un usuario y password correctos.
Y para aquellos que quieran realizar algo similar, aquí os dejo el código usado:
<?php define('IN_PHPBB', true); $phpbb_root_path = './'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); // Start session management $user--->session_begin(); $auth->acl($user->data); $user->setup(); if($user->data['is_registered']) { //User is already logged in } else { $username = request_var('userName', '', true); $password = request_var('password', '', true); // echo "usuario: " . $username . " ; password: " . $password; $result = $auth->login($username, $password); if ($result['status'] == LOGIN_SUCCESS) { //User was successfully logged into phpBB //echo "Login correcto"; session_register($username); session_register($password); if ($ref !=""){ header("location:$ref"); }else{ header("location:index.php"); } } else { //User's login failed //echo "Login incorrecto: " . $result['status']; } } ?>
Importante, antes de hacer el login no se puede ejecutar ningún ‘echo’ porque genera un error en el fichero session.php al intentar modificar el ‘header’:
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 1035: Cannot modify header information – headers already sent
Si no os funciona, revisar en la configuración del Sitio, en la parte de configuración de cookies que el dominio esté bien introducido para que al crear la sesión (y la cookie en la máquina cliente) la reconozca el navegador y accedáis ya validados.