Seite 1 von 1

Ein Login für beides: phpBB3 und phpBB2

Verfasst: 12.11.2007 12:26
von Saint
Mahlzeit geschätzte Gemeinde,

zuerst die Voraussetzungen:
  • zwei Foren, phpBB2 und phpBB3
  • die 2er läuft in einem Unterverzeichnis der 3er Version
  • die 2er läuft in der selben DB, hat aber einen anderen Prefix
  • Usernamen und Passwörter sind in beiden Foren identisch
Nun möchte ich einen User, der sich an der 3er Version anmeldet, automatisch auch am 2er System anmelden (inkl. Cookie). Also ein Login --> angemeldet an beiden Systemen.

Bei der 3er Version wäre es wohl am sinnvollsten in der includes/auth.php anzusetzen. Und zwar nach der Zeile:

Code: Alles auswählen

// If login succeeded, we will log the user in... else we pass the login array through...
			if ($login['status'] == LOGIN_SUCCESS)
Ab dort müsste stumpf ein Login / Cookie setzen für die 2er Version statt finden. Der User ist ja bereits validiert worden.

Mit der PHP class PHPBB_Login komme ich leider nicht wirklich weiter.
Hat jemand von Euch eine Idee, wie man das realisieren könnte?

Besten Dank schon mal :grin:

Saint

Verfasst: 12.11.2007 12:32
von darkon
Was soll das bringen?
Der User kann doch eh immer nur eines der beiden Foren nutzen.

Verfasst: 12.11.2007 12:52
von Saint
Keine Sorge - ich habe da schon eine Verwendung für. :wink:
Aber okay: ich fahre, bis einige Mods die ich für Olympus brauche zur Verfügung stehen, quasi einen "Hybrid".
Z.b das Smartor Album und der Download Mod laufen noch im phpBB2, alle weiteren Funktionen laufen auf Olympus. In der 2er Versionen sind alle Foren gesperrt und auch die overallheader ist Linktechnisch angepasst.
Vorschaubilder (mit Berechtigungsabfrage) aus dem Smartoralbum werden auch auf der Index von Olympus angezeigt, das habe ich für die Übergangszeit schon gebastelt.

Dadurch ist aber ein doppelter Login nötig - im neuen wie im alten System. Das will ich für die User vereinfachen.

Und um weiteren Fragen nach Sinn oder Unsinn vorzugreifen:
Das ist ein geschlossenes Forum für meinen Freundeskreis. Also keine regelmäßigen Neuregistrierungen.
Das alte Board hatte viele "Spezialfunktionen", die meine User nach wie vor brauchen.
Ist ein User erst einmal an beiden Systemen angemeldet, kann er alles nutzen.
Im alten System sollten sich die User auch nicht verirren, bzw in deaktivierte Bereiche stolpern, da eigentlich alle wichtigen Links entsprechend angepasst sind.

Verfasst: 13.11.2007 11:31
von Saint
Eine Ecke weiter bin ich gekommen.
Diese zusammengebastelte Datei lasse ich an oben genannter Stelle in der auth.php includen:

Code: Alles auswählen

<?
//			Login phpBB2 -  START

function encode_ip($dotquad_ip)
{
	$ip_sep = explode('.', $dotquad_ip);
	return sprintf('%02x%02x%02x%02x', $ip_sep[0], $ip_sep[1], $ip_sep[2], $ip_sep[3]);
}

    //generate session id

    $query = "SELECT config_value FROM phpbb_config WHERE config_name='rand_seed'";
    $return_seed = mysql_query($query) or die(mysql_error());
    $seed = mysql_result($return_seed,0);

    $val = $seed. microtime();
    $val = md5($val);
    $seed = md5($seed . $val . 'a');

    // put it back in the table..werid
    $sql = "UPDATE phpbb_config SET config_value='$seed' WHERE config_name='rand_seed'";
    $return = mysql_query($sql) or die(mysql_error());

    $session_id = md5(substr($val, 4, 16));

    //get IP
    $client_ip = ( !empty($HTTP_SERVER_VARS['REMOTE_ADDR']) ) ? $HTTP_SERVER_VARS['REMOTE_ADDR'] : ( ( !empty($HTTP_ENV_VARS['REMOTE_ADDR']) ) ? $HTTP_ENV_VARS['REMOTE_ADDR'] : getenv('REMOTE_ADDR') );
    $user_ip = encode_ip($client_ip);

    //current time
    $current_time = time();

    //create entry in sessions table
    $sql = "INSERT INTO phpbb_sessions
             (session_id, session_user_id, session_start, session_time, session_ip, session_page, session_logged_in, session_admin, SearchBot)
             VALUES ('$session_id', '$user_id', $current_time, $current_time, '$user_ip', '0', '1', '0', '0')";
    $return = mysql_query($sql) or die(mysql_error());
    // create sessiondata
    $sessiondata['userid'] = $user_id;
    $sessiondata['autologinid'] = false;

    setcookie('phpbb2mysql_data', serialize($sessiondata), $current_time + 31536000, "/", "www.xyz.de");
    setcookie('phpbb2mysql_sid', $session_id, 0, "/", "www.xyz.de");
//			Login phpBB2 -  ENDE

?>
(www.xyz.de ist natürlich durch die Cookie Domain ersetzt)

Es wird jetzt auch erfolgreich ein Cookie gesetzt und eine Session erzeugt.
Man ist aber trotzdem nicht eingeloggt. Offensichtlich wird nicht die richtige session_user_id in der Tabelle phpbb_sessions eingetragen, sondern immer der Wert -1, also als Gast.
Eigentlich müsste doch die richtige user_id aus Olympus übernommen werden, oder? Die Variable $user_id müsste ja schon von Olympus richtig erzeugt worden sein.
Hat jemand eine Idee was krumm läuft?

Gruß

Saint

Verfasst: 27.07.2008 13:49
von leopittoni
Suche genau das gleiche!!

Bist Du schon weitergekommen?

Danke! Léo