Meine User weigern sich für ein Tippspiel sich neu zu registrieren. Gibt es eine Möglichlichkeit die Tabelle für die Userregistrierung in die Tabelle vom Tippspiel zu importieren?
Useraccounts vom wbb4 übertragen. WM Tippspiel!
- Dr.Doom
- Erledigt
Ich habe einen Blog Artikel verfasst - Wie benutze ich die Suche richtig - Bitte diesen beachten und auch umsetzen bevor Ihr ein Neues Thema eröffnet!
-
-
Man denkt als Lösung sofort an etwas wie:
Leider wird es an der anderen Art des password-hash scheitern.
Die Lösung ist eine Login-Bridge:
Anstatt die eigene Tabelle zum Verifizieren des Kennwortes zu nutzen, wird die WBB4-Tabelle genutzt (Lesezugriff notwendig). Ist nach erfolgreicher Anmeldung der Benutzer noch nicht existent, dann muss ein entsprechender Datensatz in emtipp_users angelegt werden.Diese Lösung hat auch den Vorteil, dass neue WBB4-User Zugang zum Tipp-Spiel erhalten. Ich habe eine solche Bridge auch schon realisiert, einmal für Mediawiki und einmal für selbst geschriebene Software. Beide greifen auf die Anmeldedaten von WBB4 zurück und haben nur Lesezugriff auf die WBB4-Tabelle .
Da ich mich in der Tipp-Software nicht auskenne, kann ich nichts dazu sagen, wie man dort die Bridge einhängt. Ich kann aber den WBB4-Part zur Verfügung stellen:
Code- function VerifyPasswordWBB4 ( $pw, $hash )
- {
- // Verify a password entered by the user against a WBB4 hash value.
- // Only WBB3 and WBB4 style hashes are supported.
- // Returns TRUE for a correct password and FALSE otherwise.
- if ( substr($hash,0,5) == 'wcf1:' ) // WBB3
- {
- $param = explode(':',substr($hash,5)); // hash:salt
- return count($param) == 2
- && sha1( $param[1] . sha1( $param[1] . sha1( $pw )) ) == $param[0];
- }
- return crypt( crypt($pw,$hash), $hash ) == $hash;
- }
- function LoginHandlerWBB4 ( $db, $tab, $user, $pw )
- {
- // Verify a password entered by the user against a WBB4 hash value
- // stored in DB table.column 'wcf1_user.password'.
- // Only WBB3 and WBB4 style hashes are supported.
- // Returns an object or FALSE on error.
- global $DB;
- $query = "SELECT userid,username,password,banned FROM `$db`.`$tab`"
- ." WHERE username=\"{$DB->EscapeString($user)}\"";
- $res = $DB->FetchRow($query,'stdClass');
- if (!is_object($res))
- return FALSE;
- // return an object
- $acc = (object)NULL;
- $acc->user_id = $res->userid;
- $acc->account = $res->username;
- $acc->disabled = $res->banned > 0;
- $acc->pw_ok = VerifyPasswordWBB4($pw,$res->password);
- return $acc;
- }
- function LoginWBB4 ( $user, $pw )
- {
- return LoginHandlerWBB4('DATABAE_NAME','wcf1_user',$user,$pw);
- }
Natürlich muss der DB-Zugriff noch an das DB-Objekt vom Tipp-Spiel angepasst werden. Daher ist es nur eine Vorlage zur Umsetzung. -
Da ich per PN nach der Bridge gefragt wurde, hole ich hier etwas aus:
Die Bridge ist u.a. seit 2 Jahren bei Wiimmfi.de im Einsatz um beim WBB4-Forum die Kennwörter abzugleichen. Aus Wiimmfi habe ich auch die Funktionen kopiert. Die beiden Funktionen LoginHandlerWBB4() und LoginWBB4() kann man natürlich zusammenfassen; sie sind bei mir nur getrennt, da sie Bestandteil einer Source-Lib sind und ich 2 Interfaces nutze.
Wichtig ist, dass nur Hashs im WBB3 und WBB4 Format unterstützt werden, nicht aber ältere. Bei jeder Kennwort-Änderung im WBB wird das jeweils aktuelle Hash-Verfahren verwendet. Ansonsten bleiben beim Update von WBB alte Hash-Formate erhalten.
Ich verwende das Object $DB, welches automatisch bei einem einen SQL-Fehler sowohl die Query als auch den Fehlerstatus ausgibt. Die Fehlerausgabe wäre hier auch sinnvoll. Denn wie ich schon im Forum schrieb: Ein gut genutzter Fehlerkanal hilft ungemein. Bei uns wird konsequent jeder Fehler im error log beseitigt, so dass das Log im Normalfall aktiviert ist und trotzdem leer bleibt.
Dann muss das Tipp-Spiel Lesezugriff auf die WBB4-Tabelle wcf1_users haben. DB- und Tabellen-Name müssen richtig angegeben sein. Zur Rechtevergabe nutze ich den SQL-Befehl:
Unter der Annahme, dass USER der DB-Nutzer des Tipp-Spiels ist und WBB4 der Datenbankname. Genau diese Rechtevergabe kann aber Probleme bereiten, wenn man nicht Herr der Datenbank ist und somit keine Rechte für GRANT hat.
Die Alternative ist, ein mysqli-Object mit den Anmeldedaten vom WBB4 zu erstellen, um den Benutzer zu verifizieren. Die Funktionen könnten dann so aussehen:
Code- function VerifyPasswordWBB4 ( $pw, $hash )
- {
- // Verify a password entered by the user against a WBB4 hash value.
- // Only WBB3 and WBB4 style hashes are supported.
- // Returns TRUE for a correct password and FALSE otherwise.
- if ( substr($hash,0,5) == 'wcf1:' ) // WBB3
- {
- $param = explode(':',substr($hash,5)); // hash:salt
- return count($param) == 2
- && sha1( $param[1] . sha1( $param[1] . sha1( $pw )) ) == $param[0];
- }
- return crypt( crypt($pw,$hash), $hash ) == $hash;
- }
- function LoginWBB4 ( $user, $pw )
- {
- global $WBB4_HOST, $WBB4_USER, $WBB4_PW, $WBB4_NAME, $WBB4_TAB;
- $db = new mysqli($WBB4_HOST,$WBB4_USER,$WBB4_PW,$WBB4_NAME);
- if (!$db)
- die("Can't open WBB4 DB");
- $query = "SELECT userid,username,password,banned FROM `$WBB4_TAB`"
- ." WHERE username=\"{$db->real_escape_string($user)}\"";
- $res = $db->query($query);
- if ( $res === FALSE )
- {
- error_log('#DB-ERROR: '.$db->error);
- die("Can't access WBB4 DB");
- }
- $row = $res->fetch_object('stdClass');
- $db->close();
- if ( !$row)
- return FALSE;
- // return an object
- $acc = (object)NULL;
- $acc->user_id = $row->userid;
- $acc->account = $row->username;
- $acc->disabled = $row->banned > 0;
- $acc->pw_ok = VerifyPasswordWBB4($pw,$row->password);
- return $acc;
- }
Anmerkungen:
- Der neue Kode wurde von mir auf die schnelle runtergeschriebenen und ist absolut ungetestet.
- Ich habe keine Ahnung, ob und wie sich die Klasse mysqli und die globalen Funktionen mysql_*() gegenseitig beeinflussen und ob sie störungsfrei nebeneinander genutzt werden können. Die Funktionen gelten sowieso schon lange als deprecated, so dass das TippSpiel kurzfristig auf die Klasse mysqli umgestellt werden muss.
- Ich weiß nicht, ob WBB4 auch auf Windows läuft. Ich weiß aber, dass die Funktion crypt() unter Windows andere Algorithmen unterstützt. Falls WBB4 Windows-tauglich ist, kann es durchaus sein, dass die Windows-Funktion den Hash anders berechnet. Dann müsste die Funktion VerifyPasswordWBB4() angepasst werden.
-
Hab die WBB4 Login-Bridge von @Wiimm erfolgreich in das Tippspiel implementieren können! Vielen Dank für das zur Verfügung stellen! Und zwar wird bei einem Loginversuch in der WBB4-Tabelle geprüft ob es diesen User gibt und ob das Passwort richtig ist. Wenn alles korrekt ist, dann wird automatisch ein Datensatz in die Tippspiel-Tabelle users eingefügt.
Die Funktion "checkUserState()" in der include/inc.functions.php wird etwas überarbeitet und muss am Ende so aussehen:
PHP- global $CONFIG, $RUNTIME; if (isset($_POST['loginSubmit'])) { setcookie("xUser",$_POST['loginUser'],time() + (60*60*24),"/"); if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') { setcookie("xPass", 1, time() + (60*60*24), "/"); } else { setcookie("xPass", 0, time() + (60*60*24), "/"); } } $usr = (isset($_POST['loginUser']) ? $_POST['loginUser'] : (isset($_COOKIE['xUser']) ? $_COOKIE['xUser'] : "")); if(isset($_POST['loginPass'])) { $acc = (object)LoginWBB4($usr, $_POST['loginPass']); } $sql = "SELECT pwd, isUnlocked FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '". mysql_real_escape_string($usr) ."'"; $query = mysql_query($sql); $num = mysql_num_rows($query); $showmsg = 0; if ($num > 0) { $row = mysql_fetch_array($query); if((isset($acc) && is_object($acc) && $acc->pw_ok) || (isset($_COOKIE['xPass']) && $_COOKIE['xPass'] == 1)) { $sql = mysql_query("SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '".mysql_real_escape_string($usr)."'"); $row = mysql_fetch_array($sql); $_SESSION['s_id'] = $row['id']; $_SESSION['s_usr'] = $row['usr']; $_SESSION['s_name'] = $row['name']; $_SESSION['s_email'] = $row['email']; $_SESSION['s_level'] = $row['status']; $_SESSION['s_flash'] = $row['showflash']; $_SESSION['s_group'] = $row['department']; $sql = mysql_query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users SET lastLogin = '". (time() + getTimeOffset()) ."', currentPage='". mysql_real_escape_string($RUNTIME['FULL']) ."' WHERE id = '". $_SESSION['s_id'] ."'"); } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } else { if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') { if(is_object($acc) && $acc->pw_ok) { $sql = "INSERT INTO ". $CONFIG['MYSQL']['PREFIX'] ."users (usr,email,pwd,name,department,regDate,isUnlocked,showflash,bezahlt) VALUES " ."('". mysql_real_escape_string($acc->account) ."'," ."'". mysql_real_escape_string($acc->email) ."'," ."''," ."'". mysql_real_escape_string($acc->account) ."'," ."'ohne Gruppe'," ."'". (time() + getTimeOffset()) ."'," ."'1'," ."'1'," ."1)"; $result = mysql_query($sql); $sql = mysql_query("SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '".mysql_real_escape_string($usr)."'"); $row = mysql_fetch_array($sql); $_SESSION['s_id'] = $row['id']; $_SESSION['s_usr'] = $row['usr']; $_SESSION['s_name'] = $row['name']; $_SESSION['s_email'] = $row['email']; $_SESSION['s_level'] = $row['status']; $_SESSION['s_flash'] = $row['showflash']; $_SESSION['s_group'] = $row['department']; $sql = mysql_query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users SET lastLogin = '". (time() + getTimeOffset()) ."', currentPage='". mysql_real_escape_string($RUNTIME['FULL']) ."' WHERE id = '". $_SESSION['s_id'] ."'"); } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } else { $_SESSION['s_level'] = 0; $showmsg = 1; } } if (isset($_POST['loginSubmit'])) { if ($CONFIG['TEXTART'] == 0) { if ($showmsg == 2) { $msgtext = 'Ihr Zugang ist nicht aktiviert! Sie erhalten nach der Aktivierung automatisch eine E-Mail. Sollten Sie schon lange auf die Aktivierung warten, dann melden Sie sich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum Kontaktformular</a>'; } elseif ($showmsg == 1) { $msgtext = 'Die Zugangsdaten sind falsch! Überprüfen Sie Benutzername und Passwort. Haben Sie ihr Passwort vergessen? Dann klicken Sie hier: <a href="index.php?page=home/passwort/">Passwort zurücksetzen.</a>'; } } else { if ($showmsg == 2) { $msgtext = 'Dein Zugang ist nicht aktiviert! Du erhälst nach der Aktivierung automatisch eine E-Mail. Solltest du schon lange auf die Aktivierung warten, dann melde dich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum Kontaktformular</a>'; } elseif ($showmsg == 1) { $msgtext = 'Die Zugangsdaten sind falsch! Überprüfe Benutzername und Passwort. Hast du dein Passwort vergessen? Dann klicke hier: <a href="index.php?page=home/passwort/">Passwort zurücksetzen.</a>'; } } if ($showmsg > 0) { $_SESSION['message'] = array("alert",$msgtext); } }
Über diese Funktion müssen dann noch die drei Funktionen von @Wiimm eingefügt werden:
Code- function VerifyPasswordWBB4 ( $pw, $hash ){ // Verify a password entered by the user against a WBB4 hash value. // Only WBB3 and WBB4 style hashes are supported. // Returns TRUE for a correct password and FALSE otherwise. if ( substr($hash, 0, 5) == 'wcf1:' ) // WBB3 { $param = explode(':', substr($hash, 5)); // hash:salt return count($param) == 2 && sha1( $param[1] . sha1( $param[1] . sha1( $pw )) ) == $param[0]; } return crypt( crypt($pw, $hash), $hash ) == $hash;}function LoginHandlerWBB4 ( $db, $tab, $user, $pw ){ // Verify a password entered by the user against a WBB4 hash value // stored in DB table.column 'wcf1_user.password'. // Only WBB3 and WBB4 style hashes are supported. // Returns an object or FALSE on error. global $CONFIG; $query = mysql_query("SELECT userid,username,email,password,banned FROM `$db`.`$tab`" ." WHERE username=\"{mysql_real_escape_string($user)}\""); $res = mysql_fetch_object($query); if (!is_object($res)) return FALSE; // return an object $acc = (object)NULL; $acc->user_id = $res->userid; $acc->account = $res->username; $acc->email = $res->email; $acc->disabled = $res->banned > 0; $acc->pw_ok = VerifyPasswordWBB4($pw, $res->password); return $acc;}function LoginWBB4 ( $user, $pw ){ return LoginHandlerWBB4('DATENBANKNAME', 'USER-TABELLE', $user, $pw);}
In der include/inc.config.php werden ganz unten noch folgende Zeilen ergänzt:
PHP- $CONFIG['wbb']['MYSQL']['SERVER'] = "localhost";$CONFIG['wbb']['MYSQL']['USER'] = "";$CONFIG['wbb']['MYSQL']['PASS'] = "";$CONFIG['wbb']['MYSQL']['DATENBANK'] = "";$CONFIG['wbb']['MYSQL']['LINK'] = mysqli_connect($CONFIG['wbb']['MYSQL']['SERVER'], $CONFIG['wbb']['MYSQL']['USER'], $CONFIG['wbb']['MYSQL']['PASS'], $CONFIG['wbb']['MYSQL']['DATENBANK']) or die("Error " . $CONFIG['wbb']['MYSQL']['LINK']->error);
In der content/default.menu.php muss dann nur noch der Code für die Registrierungsseite entfernt werden:
PHP- if (noMember())
- {
- ?>
- <a class="nav<?php echo ($RUNTIME['PATH'][1] == "registrieren" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/registrieren/")?>">Registrieren</a><span class="hide"> | </span>
- <a class="nav<?php echo ($RUNTIME['PATH'][1] == "passwort" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/passwort/")?>">Passwort vergessen</a><span class="hide"> | </span>
- <?php
- }
-
Wurde der Code irgendwo erfolgreich eingebaut? Bei uns geht er nämlich nicht.
Ich hab mal in der inc.config diesen Code hinter das "?" gepackt, laut
Anleitung sollte es zuletzt rein kommen, so bekomme ich dann eine
Fehlermeldung ganz oben:$CONFIG['wbb']['MYSQL']['SERVER'] = "localhost";
$CONFIG['wbb']['MYSQL']['USER'] = "...;
$CONFIG['wbb']['MYSQL']['PASS'] = "...";
$CONFIG['wbb']['MYSQL']['DATENBANK'] = "....";
$CONFIG['wbb']['MYSQL']['LINK'] =
mysqli_connect($CONFIG['wbb']['MYSQL']['SERVER'],
$CONFIG['wbb']['MYSQL']['USER'], $CONFIG['wbb']['MYSQL']['PASS'],
$CONFIG['wbb']['MYSQL']['DATENBANK']) or die("Error " .
$CONFIG['wbb']['MYSQL']['LINK']->error);Fehlermeldung verdeckt vom Cover:
$CONFIG['wbb']['MYSQL']['SERVER'] = "localhost";$CONFIG['wbb']['MYSQL']['USER'] = "...";$CONFIG['wbb']['MYSQL']['PASS'] = "...";$CONFIG['wbb']['MYSQL']['DATENBANK'] = "...";$CONFIG['wbb']['MYSQL']['LINK'] = mysqli_connect($CONFIG['wbb']['MYSQL']['SERVER'], $CONFIG['wbb']['MYSQL']['USER'], $CONFIG['wbb']['MYSQL']['PASS'], $CONFIG['wbb']['MYSQL']['DATENBANK']) or die("Error " . $CONFIG['wbb']
hier Life:
http://www.nightmare-horrormovies.de/tippspiel/Wenn ich den Code vor das "?" packe, wie ich erst vermutete, kommt die Fehlermeldung nicht. Beides funktioniert aber nicht bei mir in Verbindung mit dem WBB Register.
Edit: Hab bei der inc.config den Code wieder vor dem ? geschoben, sonst sind die Zugangsdaten zu sehen.
-
Hab dir dazu gerade schon deine PN beantwortet. Ich habe es bei mir erfolgreich getestet.
Wenn es nach den Hinweisen immer noch nicht funktioniert, dann könntest du mir ja deine inc.functions.php-Datei per PN zu senden. -
Hallo,
das ist ja super das es hier eine Bridge gibt, kann man diese auch für das Buli-Tipp verwenden, wenn ja welche Datein müssen editiert werden?
Gruß
-
off Topic Anfragen bitte in dem Bulitipp stellen.
-
Hat jemand hier eigentlich schon ne funktionierende Bridge als Plugin Paket geschnürt?
-
-
Wo finde ich das Paket dazu?
-
-
Das klingt kompliziert, werde es mal testen
-
hat das einer schon als Plugin ??????
dies wäre klasse -
Funzt bei mir.
-
Das Ganze jetzt bitte noch mal für das WM Tippspiel für das WBB 4.1 Damals hatte das geklappt bei mir. Was muss geändert werden? Muss das Tippspiel noch mal neu installieren, da beim Boardumzug das nicht übernommen wurde.
-
Dr.Doom
Hat den Titel des Themas von „Useraccounts vom wbb4 übertragen.“ zu „Useraccounts vom wbb4 übertragen. WM Tippspiel!“ geändert. -
Ich habe mal den Code von oben angepasst, hab es aber nicht getestet.
Hab die WBB4 Login-Bridge von @Wiimm erfolgreich in das Tippspiel implementieren können! Vielen Dank für das zur Verfügung stellen! Und zwar wird bei einem Loginversuch in der WBB4-Tabelle geprüft ob es diesen User gibt und ob das Passwort richtig ist. Wenn alles korrekt ist, dann wird automatisch ein Datensatz in die Tippspiel-Tabelle users eingefügt.
Die Funktion "checkUserState()" in der include/inc.functions.php wird etwas überarbeitet und muss am Ende so aussehen:
PHP- global $CONFIG, $RUNTIME;
- if (isset($_POST['loginSubmit'])) {
- setcookie("xUser",$_POST['loginUser'],time() + (60*60*24),"/");
- if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') {
- setcookie("xPass", 1, time() + (60*60*24), "/");
- } else {
- setcookie("xPass", 0, time() + (60*60*24), "/");
- }
- }
- $usr = (isset($_POST['loginUser']) ? $_POST['loginUser'] : (isset($_COOKIE['xUser']) ? $_COOKIE['xUser'] : ""));
- if(isset($_POST['loginPass'])) {
- $acc = (object)LoginWBB4($usr, $_POST['loginPass']);
- }
- $sql = "SELECT pwd, isUnlocked FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '". $CONFIG['MYSQL']['CONNECT']->real_escape_string($usr) ."'";
- $query = $CONFIG['MYSQL']['CONNECT']->query($sql);
- $num = $query->num_rows;
- $showmsg = 0;
- if ($num > 0) {
- $row = $query->fetch_array();
- if((isset($acc) && is_object($acc) && $acc->pw_ok) || (isset($_COOKIE['xPass']) && $_COOKIE['xPass'] == 1)) {
- $sql = $CONFIG['MYSQL']['CONNECT']->query("SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '".$CONFIG['MYSQL']['CONNECT']->real_escape_string($usr)."'");
- $row = $sql->fetch_array();
- $_SESSION['s_id'] = $row['id'];
- $_SESSION['s_usr'] = $row['usr'];
- $_SESSION['s_name'] = $row['name'];
- $_SESSION['s_email'] = $row['email'];
- $_SESSION['s_level'] = $row['status'];
- $_SESSION['s_flash'] = $row['showflash'];
- $_SESSION['s_group'] = $row['department'];
- $sql = $CONFIG['MYSQL']['CONNECT']->query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users
- SET lastLogin = '". (time() + getTimeOffset()) ."',
- currentPage='". $CONFIG['MYSQL']['CONNECT']->real_escape_string($RUNTIME['FULL']) ."'
- WHERE id = '". $_SESSION['s_id'] ."'");
- } else {
- $_SESSION['s_level'] = 0;
- $showmsg = 1;
- }
- } else {
- if(isset($_POST['loginPass']) && $_POST['loginPass'] != '') {
- if(is_object($acc) && $acc->pw_ok) {
- $sql = "INSERT INTO ". $CONFIG['MYSQL']['PREFIX'] ."users
- (usr,email,pwd,name,department,regDate,isUnlocked,showflash,bezahlt)
- VALUES "
- ."('". $CONFIG['MYSQL']['CONNECT']->real_escape_string($acc->account) ."',"
- ."'". $CONFIG['MYSQL']['CONNECT']->real_escape_string($acc->email) ."',"
- ."'',"
- ."'". $CONFIG['MYSQL']['CONNECT']->real_escape_string($acc->account) ."',"
- ."'ohne Gruppe',"
- ."'". (time() + getTimeOffset()) ."',"
- ."'1',"
- ."'1',"
- ."1)";
- $result = $CONFIG['MYSQL']['CONNECT']->query($sql);
- $sql = $CONFIG['MYSQL']['CONNECT']->query("SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE usr = '".$CONFIG['MYSQL']['CONNECT']->real_escape_string($usr)."'");
- $row = $sql->fetch_array();
- $_SESSION['s_id'] = $row['id'];
- $_SESSION['s_usr'] = $row['usr'];
- $_SESSION['s_name'] = $row['name'];
- $_SESSION['s_email'] = $row['email'];
- $_SESSION['s_level'] = $row['status'];
- $_SESSION['s_flash'] = $row['showflash'];
- $_SESSION['s_group'] = $row['department'];
- $sql = $CONFIG['MYSQL']['CONNECT']->query("UPDATE ". $CONFIG['MYSQL']['PREFIX'] ."users SET lastLogin = '". (time() + getTimeOffset()) ."', currentPage='". $CONFIG['MYSQL']['CONNECT']->real_escape_string($RUNTIME['FULL']) ."' WHERE id = '". $_SESSION['s_id'] ."'");
- } else {
- $_SESSION['s_level'] = 0;
- $showmsg = 1;
- }
- } else {
- $_SESSION['s_level'] = 0;
- $showmsg = 1;
- }
- }
- if (isset($_POST['loginSubmit'])) {
- if ($CONFIG['TEXTART'] == 0) {
- if ($showmsg == 2) {
- $msgtext = 'Ihr Zugang ist nicht aktiviert! Sie erhalten nach der Aktivierung automatisch eine E-Mail. Sollten Sie schon lange auf die Aktivierung warten, dann melden Sie sich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum Kontaktformular</a>';
- } elseif ($showmsg == 1) {
- $msgtext = 'Die Zugangsdaten sind falsch! Überprüfen Sie Benutzername und Passwort. Haben Sie ihr Passwort vergessen? Dann klicken Sie hier: <a href="index.php?page=home/passwort/">Passwort zurücksetzen.</a>';
- }
- } else {
- if ($showmsg == 2) {
- $msgtext = 'Dein Zugang ist nicht aktiviert! Du erhälst nach der Aktivierung automatisch eine E-Mail. Solltest du schon lange auf die Aktivierung warten, dann melde dich beim Administrator: <a href="index.php?page=home/kontakt/formular/">zum Kontaktformular</a>';
- } elseif ($showmsg == 1) {
- $msgtext = 'Die Zugangsdaten sind falsch! Überprüfe Benutzername und Passwort. Hast du dein Passwort vergessen? Dann klicke hier: <a href="index.php?page=home/passwort/">Passwort zurücksetzen.</a>';
- }
- }
- if ($showmsg > 0) {
- $_SESSION['message'] = array("alert",$msgtext);
- }
- }
Über diese Funktion müssen dann noch die drei Funktionen von @Wiimm eingefügt werden:
Code- function VerifyPasswordWBB4 ( $pw, $hash ){
- // Verify a password entered by the user against a WBB4 hash value.
- // Only WBB3 and WBB4 style hashes are supported.
- // Returns TRUE for a correct password and FALSE otherwise.
- if ( substr($hash, 0, 5) == 'wcf1:' ) { // WBB3
- $param = explode(':', substr($hash, 5)); // hash:salt
- return count($param) == 2 && sha1( $param[1] . sha1( $param[1] . sha1( $pw )) ) == $param[0];
- }
- return crypt( crypt($pw, $hash), $hash ) == $hash;
- }
- function LoginHandlerWBB4 ( $db, $tab, $user, $pw ){
- // Verify a password entered by the user against a WBB4 hash value
- // stored in DB table.column 'wcf1_user.password'.
- // Only WBB3 and WBB4 style hashes are supported.
- // Returns an object or FALSE on error.
- global $CONFIG;
- $query = $CONFIG['MYSQL']['CONNECT']->query("SELECT userid,username,email,password,banned FROM `$db`.`$tab`"
- ." WHERE username=\"{$CONFIG['MYSQL']['CONNECT']->real_escape_string($user)}\"");
- $res = $query->fetch_object();
- if (!is_object($res))
- return FALSE;
- // return an object
- $acc = (object)NULL;
- $acc->user_id = $res->userid;
- $acc->account = $res->username;
- $acc->email = $res->email;
- $acc->disabled = $res->banned > 0;
- $acc->pw_ok = VerifyPasswordWBB4($pw, $res->password);
- return $acc;
- }
- function LoginWBB4 ( $user, $pw ){
- return LoginHandlerWBB4('DATENBANKNAME', 'USER-TABELLE', $user, $pw);
- }
In der include/inc.config.php werden ganz unten noch folgende Zeilen ergänzt:
PHP- $CONFIG['wbb']['MYSQL']['SERVER'] = "localhost";
- $CONFIG['wbb']['MYSQL']['USER'] = "";
- $CONFIG['wbb']['MYSQL']['PASS'] = "";
- $CONFIG['wbb']['MYSQL']['DATENBANK'] = "";
- $CONFIG['wbb']['MYSQL']['LINK'] = mysqli_connect($CONFIG['wbb']['MYSQL']['SERVER'], $CONFIG['wbb']['MYSQL']['USER'], $CONFIG['wbb']['MYSQL']['PASS'], $CONFIG['wbb']['MYSQL']['DATENBANK']) or die("Error " . $CONFIG['wbb']['MYSQL']['LINK']->error);
In der content/default.menu.php muss dann nur noch der Code für die Registrierungsseite entfernt werden:
PHP- if (noMember())
- {
- ?>
- <a class="nav<?php echo ($RUNTIME['PATH'][1] == "registrieren" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/registrieren/")?>">Registrieren</a><span class="hide"> | </span>
- <a class="nav<?php echo ($RUNTIME['PATH'][1] == "passwort" ? " active" : "")?>" href="<?php echo $CONFIG['PATH'].gLink("home/passwort/")?>">Passwort vergessen</a><span class="hide"> | </span>
- <?php
- }
-
funktioniert bei mir lieder nicht, wenn ich keinen Einbau Fehler gemacht habe, kommt nur ein "Error" mit weißer Seite.
Einzig der content/default.menu.php Codeteil haut hin.
-
Was sagt denn dein Apache-Error-Log?
Den Datenbanknamen und die User-Tabelle in der LoginWBB4-Funktion auch angepasst?
-
Was sagt denn dein Apache-Error-Log?
Den Datenbanknamen und die User-Tabelle in der LoginWBB4-Funktion auch angepasst?
Ich weis nicht mal wo ich den Error-Log findne kann, im ACP steht nur das drin was direkt im Forum los ist. Hab dort nichts mit der URL "wm" gefunden. Ich hab sonst nichts angpasst, ausser das wasi m Code hier steht zum einbauen.