Author Topic: WBB3 login and logout integration  (Read 6738 times)

0 Members and 1 Guest are viewing this topic.

Offline Sunny C.

  • Addicted member
  • ******
  • Posts: 1.805
  • I ♥ 4I
    • View Profile
WBB3 login and logout integration
« on: November 24, 2012, 06:27:13 PM »
Hallo zusammen,

ich habe da zwei tolle Anleitungen gefunden, mit der es möglich ist Benutzer Extern aus dem Woltlab Burningboard 3 anzumelden und abzumelden.

In Verbindung mit "[Mod] WBB/4images Einzelregistrierug (Single Registration 4images and WBB)" würde das genau das richtige sein um das abzurunden.

Allerdings weis ich nicht wie ich das vernünftig einbauen soll. Wenn jemand Interesse hat um das ganze zu testen, kann ich gerne Zugangsdaten zukommen lassen. Die Single Registration "[Mod] WBB/4images Einzelregistrierug (Single Registration 4images and WBB)" ist bereits verbaut und funktioniert.

---

Hello together,

I have since found that it is possible two great guides externally to log user out of the Woltlab Burningboard 3 and log off.

In conjunction with"[Mod] WBB/4images Einzelregistrierug (Single Registration 4images and WBB)", that would be the right to complete that.

However, I don't know how I should reasonably fit that. If anyone has interest to test the whole thing, I can be pleased to access data. The single registration "[Mod] WBB/4images Einzelregistrierug (Single Registration 4images and WBB)" is already installed and working.

WBB3 Login: (https://technex.org/index.php?page=TutorialsEntry&tutorialID=17)
<?php
// define relative dir to wbb installation
if (!defined('RELATIVE_WBB_DIR')) define('RELATIVE_WBB_DIR''board/');

// wbb imports
require_once(RELATIVE_WBB_DIR.'global.php');

// wcf imports
require_once(WCF_DIR.'lib/system/session/UserSession.class.php');
require_once(
WCF_DIR.'lib/system/auth/UserAuth.class.php');

class 
Login {
  
// Hier definieren wir Variablen mit Standard-Inhalten
  // user object
  
public $user null;
  
  
// given username
  
public $username '';
  
  
// given password
  
public $password '';
  
  
// error field
  
public $errorField '';
  
  
// error text
  
public $errorText '';
  
    
/**
     * Neue Instanz der Klasse, die den Ablauf steuert.
     */
    
public function __construct() {
    
// Benutzer ist bereits angemeldet, "userID" also ungleich "0" -> Wir geben den Benutzernamen aus und stoppen den Ablauf hier
    
if (WCF::getUser()->userID != 0) {
      echo 
'<p>Du bist angemeldet als <strong>'.WCF::getUser()->username.'</strong>.</p>';
      exit;
    }
    
    
// Benutzer ist noch nicht angemeldet, "userID" also gleich "0" -> Wir prüfen, ob Daten übergeben wurden und handeln entsprechend
    // Keine Daten übergeben -> Wir geben unser Loginformular aus
    
if (!count($_POST)) {
      
$this->showForm();
    }
    
// Daten übergeben -> Wir lesen diese mit readParameters() ein
    
else {
      
$this->readParameters();
    }
    }
  
    
/**
     * Lesen der eingegebenen Daten.
     */
    
public function readParameters() {
    
// Wir lesen den Benutzernamen aus den übergebenen Daten aus und entfernen unnötige Leerzeichen
        
if (isset($_POST['username'])) $this->username StringUtil::trim($_POST['username']);
        
    
// Wir lesen das Kennwort aus, welches der Benutzer eingegeben hat
        
if (isset($_POST['password'])) $this->password $_POST['password'];
        
        
// Nun prüfen wir die Daten, geben einen Fehler aus oder melden den Benutzer an
        
$this->checkLoginData();
    }
  
    
/**
     * Daten des Benutzers prüfen.
     */
    
public function checkLoginData() {
    
// Wir prüfen die Daten in einem try/catch-Block, um den Ablauf durch Exceptions unterbrechen zu können
    
try {
      
// Prüfen, ob kein Benutzername eingegeben wurde
          
if (empty($this->username)) {
        throw new 
UserInputException('username');
      }
      
      
// Prüfen, ob kein Kennwort eingegeben wurde
      
if (empty($this->password)) {
        throw new 
UserInputException('password');
      }
      
      
// Prüfen des Kennwortes und ggf. Rückgabe eines neuen Objektes
      
$this->user UserAuth::getInstance()->loginManually($this->username$this->password);
      
      
// Es ist kein Fehler aufgetreten; Wir melden den Benutzer "richtig" an und leiten ihn weiter
      
$this->doLogin();
    }
    catch (
UserInputException $e) {
      
// Setze das betroffene Eingabefeld, welches den Fehler verursacht hat
      
$this->errorField $e->getField();
      
      
// Setze einen Fehlertext (alternativ könnte man noch abfragen, welcher Fehler aufgetreten ist und den Text entsprechend anpassen)
      
$this->errorText 'Es ist ein Fehler aufgetreten. Bitte überprüfe das markierte Eingabefeld.';
      
      
// Abschließend geben wir das Formular erneut aus
      
$this->showForm();
    }
    }
  
    
/**
     * Den Benutzer "richtig" anmelden und zur Loginseite weiterleiten.
     */
    
public function doLogin() {
    
// Setze Daten des Benutzern
    
UserAuth::getInstance()->storeAccessData($this->user$this->username$this->password);
    
    
// Session ändern
    
WCF::getSession()->changeUser($this->user);
    
    
// Benutzer weiterleiten
    
HeaderUtil::redirect('login.php');
    exit;
    }
  
    
/**
     * Gibt ein einfaches Formular aus, mit dem sich ein Benutzer anmelden kann.
     */
    
public function showForm() {
    
// Wir prüfen zunächst, ob ein Fehler bekannt ist und geben den Fehlertext hier aus
    
if (!empty($this->errorText)) {
      echo 
'<p style="color:red;font-weight:bold">' $this->errorText '</p>';
    }
    
    
// Nun geben wir das eigentliche Formular aus
    // Wir senden die Daten an die Datei "login.php" mit der Methode "post"
    // Die Felder werden befüllt, sobald man Daten eingegeben hat, diese aber nicht anerkannt wurden
    // Mit einer Abfrage markieren wir das Eingabefeld, welches den Fehler verursacht hat
?>
<form action="login.php" method="post">
  <p>Benutzername:<br /><input name="username" type="text" value="<?php echo $this->username ?>" size="30"<?php if ($this->errorField == 'username') { echo ' style="border:2px solid red"'; } ?> /></p>
  <p>Kennwort:<br /><input name="password" type="password" value="<?php echo $this->password ?>" size="30"<?php if ($this->errorField == 'password') { echo ' style="border:2px solid red"'; } ?> /></p>
  <p><br /><br /></p>
  <p><input type="submit" value="Absenden"> <input type="reset" value="Abbrechen"></p>
</form>
<?php
    
}
}

// Wir "starten" unsere Klasse, die dann automatisch die weiteren Schritte abarbeitet
new Login;
?>


WBB3 Logout: (https://technex.org/index.php?page=TutorialsEntry&tutorialID=23)
<?php
// define relative dir to wbb installation
if (!defined('RELATIVE_WBB_DIR')) define('RELATIVE_WBB_DIR''board/');

// wbb imports
require_once(RELATIVE_WBB_DIR.'global.php');

class 
Logout {
    
/**
     * Neue Instanz der Klasse, die den Ablauf steuert.
     */
    
public function __construct() {
        
// Wir prüfen, ob der Benutzer überhaupt angemeldet ist -> Wenn nicht, geben wir eine meldung aus und stoppen den Ablauf hier
        
if (WCF::getUser()->userID == 0) {
            echo 
'<p>Du bist nicht angemeldet.</p>';
            exit;
        }
        
        
// Benutzer abmelden
        
$this->doLogout();
    }
    
    
/**
     * Hier findet der eigentliche Logout statt. Nachdem der Benutzer abgemeledet wurde, wird er an die "index.php" weitergeleitet.
     */
    
public function doLogout() {
        
// Wir löschen die aktuelle Sitzung des Benutzers
        
WCF::getSession()->delete();
        
        
// Wir löschen die gesetzten Cookies
        
if (isset($_COOKIE[COOKIE_PREFIX.'userID'])) HeaderUtil::setCookie('userID'0);
        if (isset(
$_COOKIE[COOKIE_PREFIX.'password'])) HeaderUtil::setCookie('password''');
        
        
// Benutzer weiterleiten
        
HeaderUtil::redirect('index.php');
        exit;
    }
}

// Wir "starten" unsere Klasse, die dann automatisch die weiteren Schritte abarbeitet
new Logout;
?>
« Last Edit: November 24, 2012, 06:40:51 PM by Sumale.nin »

Rembrandt

  • Guest
Re: WBB3 login and logout integration
« Reply #1 on: November 25, 2012, 05:52:57 PM »
Hi!

So wie es aussieht funktioniert das nicht, da es im WBB und 4images zwei gleichnamige Klassen gibt (Template und Session) .

mfg Andi

Offline Sunny C.

  • Addicted member
  • ******
  • Posts: 1.805
  • I ♥ 4I
    • View Profile
Re: WBB3 login and logout integration
« Reply #2 on: November 25, 2012, 07:52:07 PM »
Das ist ja doof.
Was wäre, wenn ich diese Klassen in 4images umbenenne?

Rembrandt

  • Guest
Re: WBB3 login and logout integration
« Reply #3 on: November 25, 2012, 08:46:01 PM »
ja kannst du schon machen, aber ob das genügt...
ob es nicht einfacher ist in der includes/session.php in der "function login" die session table vom wbb zu füllen und ein wbb cookie zu setzten.

Offline Sunny C.

  • Addicted member
  • ******
  • Posts: 1.805
  • I ♥ 4I
    • View Profile
Re: WBB3 login and logout integration
« Reply #4 on: November 25, 2012, 08:57:28 PM »
Mhhhhh,
ok ich versuche das mal hinzubekommen XD
Wenn nicht, kann ich mich an dich wenden?


Edit://
Ich weis gar nicht wie ich da anfangen soll....
« Last Edit: November 25, 2012, 09:38:33 PM by Sumale.nin »