4images Forum & Community

4images Modifications / Modifikationen => Mods & Plugins (Requests & Discussions) => Topic started by: Sunny C. on November 24, 2012, 06:27:13 PM

Title: WBB3 login and logout integration
Post by: Sunny C. 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) (http://www.4homepages.de/forum/index.php?topic=27421.0)" 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) (http://www.4homepages.de/forum/index.php?topic=27421.0)" 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) (http://www.4homepages.de/forum/index.php?topic=27421.0)", 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) (http://www.4homepages.de/forum/index.php?topic=27421.0)" 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;
?>
Title: Re: WBB3 login and logout integration
Post by: Rembrandt 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
Title: Re: WBB3 login and logout integration
Post by: Sunny C. on November 25, 2012, 07:52:07 PM
Das ist ja doof.
Was wäre, wenn ich diese Klassen in 4images umbenenne?
Title: Re: WBB3 login and logout integration
Post by: Rembrandt 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.
Title: Re: WBB3 login and logout integration
Post by: Sunny C. 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....