Seite 1 von 2

Schnittstelle - Benutzer über externes PHP-Skript anlegen

Verfasst: 30.04.2008 14:15
von Kalum
Hallo,
ich habe auf meiner Webseite eine Benutzerverwaltung. Nun möchte ich, wenn ein User sich auf dieser registriert, auch gleich einen Nutzer für das integrierte Forum PHPBB3 anlegen und ihn einer bestimmten Gruppen zuweisen. Dies soll über ein PHP-Skript geschehen.

Gibt es eine Schnittstelle mit der ich PHPBB sagen kann: Registriere mir den User "Frank" mit Passwort "Hallo" und weise ihn der Gruppe "LeuteSued" zu.
Oder muss ich auf die Klassen von PHPBB zugreifen und die SQLs selbst schreiben? Ich bin doch sicher nicht der Erste der diese Idee hat, oder? :grin:

Vielen Dank

Verfasst: 06.05.2008 11:08
von Dr.Briefs
Nein du bist nicht der erste der das Anliegen hat, ich gehöre auch dazu... . Nur hab ich noch nirgens eine wirklich brauchbare Lösung gefunden/bekommen.

hier ein paar topics dazu:
Meiner
und ein anderer

Verfasst: 06.05.2008 11:39
von h32Lg
eigentlich *g* müsste man doch nur die daten (email, nick, passwort) in die datenbank des forums speichern ;-)

Dazu solltest du aber einige Kenntnisse im Umgang mit PHP sowie fortgeschrittene Kenntnisse im Umgang mit MySQL haben :D

Ansonsten kanns dir passieren, das jemand eine SQL-Injektion versucht ...

Aber wer weiß, vlt gibt es ja auch fertige Scripte dazu ;-)

greets h32Lg 8)

Verfasst: 06.05.2008 12:22
von Dr.Briefs
Das hat ein Kumpel von mir, der zwar übelst Ahnung von PHP/MySQL hat aber keine vom phpbb, schon probiert und es lief nicht... .

Verfasst: 06.05.2008 12:27
von h32Lg
Dr.Briefs hat geschrieben:Das hat ein Kumpel von mir, der zwar übelst Ahnung von PHP/MySQL hat aber keine vom phpbb, schon probiert und es lief nicht... .
Sinn ?¿

Naja, möglich ist es aber normal *denkz bei gelegenheit schau ichs mir nochmal genauer an ;-)

greets h32Lg 8)

Geschafft

Verfasst: 07.05.2008 11:27
von Kalum
Also ch habe es jetzt per SQL gemacht und geschafft :grin:

Vielen Dank erstmal für die Antworten.
Ich habe noch ein bißchen den Code durchforstet und folgendes entdeckt.
  • Bei der Überprüfung des Passworts wird auch ein MD5 Hash akzeptiert. Vielleicht sind das ja noch Altlasten aus/wegen PHPBB2
  • Die uique_id für das Feld user_form_salt in der Tabelle phpbb_users wird mit der Funktion unique_id erstellt, die Zufallswerte enthält. Also habe ich mir selbst eine unique_id Funktion gebaut. Das funktioniert.
    PHPBB benutzt diese wohl um den PasswortHash zu erzeugen und zu prüfen. Da ich aber MD5 nutze, brauche ich die sowieso nicht. Habe aber mal eine erstellt :wink:

Also habe ich folgendes gemacht:


Für die Funktion utf8_clean_string(), die ihr gleich brauchen werdet, müsst ihr nur zwei php Dateien von PHPBB inkludieren:

Code: Alles auswählen

include_once("includes/utf/utf_normalizer.php");
 include_once("includes/utf/utf_tools.php");
Vorher noch die globalen Variablen setzen (Das define muss ganz oben im Code stehen):

Code: Alles auswählen

define('IN_PHPBB',true);
$phpEx='php';
global $phpEx;
Dann habe ich folgendes Array mit Userdaten erzeugt (Den Rest der Daten in der Tabelle für einen User müsst ihr nicht angeben. Die werden per Default gesetzt):

Code: Alles auswählen

	function createSqlDataArray($username, $password, $email)
	{
		$usernameUTF8 = utf8_clean_string($username);
		
		$sql_ary = array(
				'username'			=> $username,
				'user_regdate'		=> time(),
				'username_clean'	=> $usernameUTF8,
				'user_password'		=> md5($password),
				'user_passchg'		=> time(),
				'user_email'		=> strtolower($email),
				'user_email_hash'	=> crc32(strtolower($email)) . strlen($email),
				'group_id'			=> 2,
				'user_dateformat'	=> 'D M d, Y g:i a',
				'user_lang'			=> 'de_x_sie',
				'user_style'		=> 1,
				'user_form_salt'	=> unique_id_own($username, $password, $email),
			);		
			return $sql_ary;
	}	
Für meine uique_id_own() habe ich folgendes genommen:

Code: Alles auswählen

substr(md5($username.time()),4 ,16);
dann den hier erzeugten SQL String in die Datenbank jagen (das $sql_ary kommt, wie man sieht, aus der Funktion vorher :wink: ):

Code: Alles auswählen

function createSQL($sql_ary)
	{
		$sqlString='INSERT INTO phpbb_users 
		(
			group_id,
			user_ip,
			user_regdate,
			username,
			username_clean,
			user_password,
			user_passchg,
			user_email,
			user_email_hash,
			user_lang,
			user_style,
			user_dateformat,
			user_form_salt
		)
		
		VALUES(
		'.$sql_ary['group_id'].',
		"127.0.0.1",
		"'.$sql_ary['user_regdate'].'",
		"'.$sql_ary['username'].'",
		"'.$sql_ary['username_clean'].'",
		"'.$sql_ary['user_password'].'",
		"'.$sql_ary['user_passchg'].'",
		"'.$sql_ary['user_email'].'",
		"'.$sql_ary['user_email_hash'].'",
		"'.$sql_ary['user_lang'].'",
		"'.$sql_ary['user_style'].'",
		"'.$sql_ary['user_dateformat'].'",
		"'.$sql_ary['user_form_salt'].'"	
		)';
		
		return $sqlString;
	}
Jetzt ist der User in der Datenbank!

Dann müsst ihr ihn nur noch in eine Gruppe stecken. (Die Wahl der Gruppe bleibt natürlich Euch überlassen! :grin: ) Hier die Standardgruppe
Die ID des erzeugten Users holt ihr Euch vorher bei mysql über mysql_insert_id()

Code: Alles auswählen

	function getGroupSQL($userId)
	{
		return 'INSERT INTO phpbb_user_group (group_id, user_id, group_leader, user_pending) VALUES(2, '.$userId.',0,0)';	
	}
Wenn ihr euch nun in PHPBB einloggt, bekommt ihr folgende Meldung:
Sie wurden erfolgreich eingeloggt
:grin:

Und jetzt viel Spaß.

Würde mich freuen wenn ihr hier im Forum eine Nachricht hinterlasst wenn es geklappt hat.

Bis dann

Verfasst: 15.06.2008 13:09
von br32768
@Kalum: vielen Dank für Deinen äußerst hilfreichen Beitrag

Für phpBB3 gibt es noch folgendes zu beachten:
1. die globale Variable $phpbb_root_path muss analog zu $phpEx gesetzt werden
2. In der Tabelle phpbb_users gibt es das Feld 'user_form_salt' nicht mehr

Verfasst: 18.06.2008 09:30
von Kalum
Oha, das mit der Variablen $phpbb_root_path stimmt natürlich. Sorry. :-?


Allerdings zu:
2. In der Tabelle phpbb_users gibt es das Feld 'user_form_salt' nicht mehr
...finde ich es seltsam. In meinen Installationen ist es in phpbb_users vorhanden...? Ich habe direkt die Version 3.0.1 installiert.
Was ist jetzt anders? Hast Du ein Update von Version 2 gemacht? Ist das dann so?

Weiß jemand wofür das gut ist und wieso es mal da zu sein scheint und mal nicht?

Bis dann
Kalum

Verfasst: 18.06.2008 09:51
von Boecki91
Wegen dem Passwort könntet ihr auch vielleicht mal in der includes/functions.php umschauen, dort findet Ihr das was Ihr sucht...

Verfasst: 18.06.2008 10:15
von br32768
@Kalum: vielen Dank für Deine Info. Wir haben noch die Version 3.0 rc5 im Einsatz. Wir werden einen Update auf 3.0.1 fahren. Ich werde das dann noch einmal wieder prüfen.