Integration in Zend

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
t_b
Mitglied
Beiträge: 4
Registriert: 04.09.2011 14:30

Integration in Zend

Beitrag von t_b »

Hallo,

Ich möchte phpBB in mein Zend-Projekt integrieren. Dafür habe ich phpBB in den 'public' Ordner von Zend als Unterordner 'forum' installiert. Ich möchte nun in meinem Zend Projekt die Benutzeraccounts des phpBB nutzen.

Dafür habe ich zunächst in der index.php den Forenpfad gesetzt:

Code: Alles auswählen

// Define path to forum directory
defined('FORUM_PATH')
     || define('FORUM_PATH', realpath(dirname(__FILE__) . '/forum'));
In meinem Usercontroller behandle ich nun ein kleines Login-Form:

Code: Alles auswählen

$params = $this->getRequest()->getParams();

// phpBB3 Initialisierung
global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template;
define('IN_PHPBB', true);
define('PHPBB_INSTALLED',true);
$phpbb_root_path = FORUM_PATH . '/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$phpBBFile =  $phpbb_root_path . 'common.' . $phpEx;
require_once $phpBBFile;

$auth = new auth();
$user = $auth->login($params['user'], $params['pw'],true);

if (!$user['error_msg']) {
    require_once $phpbb_root_path . 'includes/session.' . $phpEx;
    $session = new session();
    $session->session_begin();
    try {
         $session->session_create($user['user_id']));
    } catch (Exception $e) {
         echo $e->getMessage();
    }       
}
Nun, der Code gibt mir erfolgreich den Benutzer zurück, und erstellt die Session, inklusive Cookies von phpBB. Gehe ich aber von meinem aktuellen Pfad, also z.b. http://meinedomain.de/user/login nach http://meinedomain.de/forum ist der Benutzer nicht im phpBB wie gedacht eingeloggt. Nun stelle ich mir die Frage woran das liegt. (Die Cookies sind es mmn nach nicht, das der cookie für die gesamte domain gilt).
t_b
Mitglied
Beiträge: 4
Registriert: 04.09.2011 14:30

Re: Integration in Zend

Beitrag von t_b »

Hat denn noch keiner versucht phpBB in andere Systeme zu integrieren?
Die Authentifizierun gegen die Datenbank funktioniert ja, aber das Problem mit der 'falschen' Session muss doch jemand schon einmal gehabt haben.
Ich weiss mittlerweile, dass ich 'session->session_create ' nicht ausführen darf, da das eine andere Methode übernimmt, aber dennoch funktioniert es nicht.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Integration in Zend

Beitrag von Pyramide »

t_b hat geschrieben:Hat denn noch keiner versucht phpBB in andere Systeme zu integrieren?
Doch, deshalb gibt es in phpBB auch ein entsprechendes Plugin-System dafür: http://wiki.phpbb.com/Authentication_plugins (ist übrigens in der Forum-FAQ verlinkt...)
KB:knigge
t_b
Mitglied
Beiträge: 4
Registriert: 04.09.2011 14:30

Re: Integration in Zend

Beitrag von t_b »

Mhh, ich dachte ich hätte im ersten Beitrag darauf hingewiesen, dass ich dieses Seite als Anhaltspunkt genutzt habe :o . Mein Fehler....

Ziel soll es ja (für mich) nicht sein, den Benutzer nur gegen die Datenbank von phpBB zu authentifizieren, sondern zudem eine Session zu erstellen, mit der der Benutzer sich nach Anmeldung im Zend-Projekt sich nicht nochmal im Forum explizit anmelden zu müssen.
In der Wiki steht, dass der Benutzer mit der Login-Methode gegen die Datenbank authentifiziert wird. Zudem benötigt man die Autologin-Methode um eine neue Session zu erstellen (also ein Cookie mit der SessionId, einen mit der UserId und ein Eintrag in der Tabelle 'Session' mit SessionId und UserId).
Da die Methode jedoch nicht (mehr) verfügbar ist, und die Login-Methode den Parater 'autologin' besitzt, dachte ich, dass es genügt diesen auf TRUE zu setzen. Dies scheint jedoch nicht der Fall zu sein. Und deshalb ja auch die Frage....
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Re: Integration in Zend

Beitrag von Pyramide »

t_b hat geschrieben:Da die Methode jedoch nicht (mehr) verfügbar ist, und die Login-Methode den Parater 'autologin' besitzt, dachte ich, dass es genügt diesen auf TRUE zu setzen. Dies scheint jedoch nicht der Fall zu sein. Und deshalb ja auch die Frage....
Ich glaube du verwechselst da was. Nicht du musst die Funktionen aufrufen, sondern du musst diese implementieren und phpBB ruft diese dann auf. Guck dir am besten mal die includes/auth/auth_apache.php oder includes/auth/auth_ldap.phpan, da kannst du sehen wie sowas aussehen muss. Anstatt auf $_SERVER['PHP_AUTH_USER'] oder den LDAP-Server zuzugreifen, musst du dann eben prüfen, ob der Benutzer in deiner Anwendung angemeldet ist.
KB:knigge
t_b
Mitglied
Beiträge: 4
Registriert: 04.09.2011 14:30

Re: Integration in Zend

Beitrag von t_b »

In der Tat, da scheine ich was missverstanden zu haben.
Jedoch möchte ich nicht die Art meiner Authentifizierung ändern, sondern die vorhandenen Mechanismen nutzen um eine vom Forum nutzbare Benutzer-Session zu erstellen.

Vielleicht habe ich mich auch falsch ausgedrückt... deshalb schreibe ich mal die Logik auf:

- Benutzer kommt auf http://domain.de/
- Benutzer findet auf der Haupt und den Unterseiten http://domain.de/seite1 http://domain.de/seite2/blahblubb ein Loginfeld vor
- Benutzer meldet sich auf einer der Seiten an, mit dem Benutzernamen und passwort aus der phpbb Datenbank
- Seite überprüft auf Korrektheit der Daten mit phpBB Routine <== auth->login($user, $pass);
- Seite erstellt eine Session über phpBB Routine, so dass bei einem wechsel auf http://domain.de/forum der benutzer bereits angemeldet ist <== das Problem....
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“