jemand ne idee wie bzw. in welchem file ich den userlogin anpassen kann?
ich möchte gerne das bei username und passwort groß und kleinschreibung egal ist
Danke im Vorraus
jemand ne idee wie bzw. in welchem file ich den userlogin anpassen kann?
ich möchte gerne das bei username und passwort groß und kleinschreibung egal ist
Danke im Vorraus
Der Username ist caseinsensitive (weil für die Datenbank 'a' = 'A' ist, nicht, weil Contao da etwas macht). Das Password ist casesensitive, weil 'a' einen anderen Hashwert ergibt als 'A'.
Meines Wissens -- und zurecht -- gibt es keine Einstellung der Art
[x] mache das System unsicherer!
Warum willst Du das haben?
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Das wurde die seite zwar unsicher machen keine frage ...
Jedoch den ablauf und die übersicht auf meiner page erleichtern
Das es keine vorfunktion gibt ist klar...
Dachte daran die registrierung zu manipulieren mit strtolower oda sowas
Und das dann natürlich auch beim login zu machen
Jain. Es kommt auf die Kollation drauf an. Standardmäßig ist diese utf8_general_ci. Das ci am Ende bedeutedet caseinsensetiv (also so wie du es beschrieben hast). Wird aber eine andere Kolletion verwendet (gibt da ja auch welche mit ..._cs) diese wären dann case sensitive. Nur der Vollständigkeithalber
@helmi
Wie bereits gesagt wurde gibt es hierfür keine Einstellungsmöglichkeit, du könntest aber eventuell ein eigenes Modul dazu schreiben, vielleicht ist hier bei der createNewUser-Hook was für dich, sofern es sich überhaupt um die Frontend Benutzer handelt.
Kein Privat Support via PM.
Würde mir das umstellen von cs auf ci beim verschlüsselten passwort nichts zerstören?
Für den username wäre das durchaus vorstellbar danke...
Ich weis nicht ich fürchte meine programmierkenntnisse reichen
Nur aus um code anzupassen, nicht um komplexe funktionen zu erschaffen
case senitive oder nicht der Datenbank ist beim gehashten Passwort vollkommen belanglos, da das Ergebnis des Hashens von (z.B.) 'meinPassWort' etwas vollkommen anderes ergibt, als das hashen von 'meinpasswort' und wiederum etwas anderes als das hashen von 'MEINPASSWORT' usw.
Du müsstest also an alle Stellen ran, an denen das Klartextpasswort im Spiel ist. Wenn Du es dort vor seiner weiteren Verwendung in Kleinschreibung wandelst (oder in Großschreibung, das wäre egal, Hauptsache einheitlich), dann ist es egal wie es der User bei der Vergabe und beim login eingibt und Du hättest erreicht, was Du willst.
Ich würde mir den Wunsch aber noch mal ganz genau überlegen: Bequemlichkeit darf nicht vor Sicherheit gehen.
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Die letzte Antwort ist zwar etwas her, aber ich wollte mal für Leute die das selbe Problem haben, einen Lösungsweg aufzeigen:
Man muss das LoginModul erweitern und darin die Zeile wo das "username" Feld aus der Post variable ausgelesen wird umändern
(in dem man die funktion generate() überschreibt (copy und paste) und dann die eine zeile ändert):
Und dann bei der Registrierung genau das selbe:Code:class ModuleLoginExtended extends \ModuleLogin { public function generate() {... // Overwrite the jumpTo page with an individual group setting $objMember = \MemberModel::findByUsername(strtolower(\Input::post('username'))); // änderung if ($objMember !== null) { \Input::setPost("username",strtolower(\Input::post('username')));//hinzufügen ... } }
(eine Zeile hinzufügen)
In der config.php:Code:class ModuleRegistrationExtended extends \ModuleRegistration{ protected function createNewUser($arrData) {... $arrData['username'] = strtolower($arrData['username']); ... } }
das wandelt alle Nutzernamen vor dem Speichern in Kleinbuchstaben um (strtolower)Code:$GLOBALS['FE_MOD']['user']['registration'] = 'ModuleRegistrationExtended'; $GLOBALS['FE_MOD']['user']['login'] = 'ModuleLoginExtended';
Und auch beim Einloggen werden die Eingaben umgewandelt.
Da ich relativ neu bei Contao dabei bin, weiß ich nicht wie schön oder sauber diese Lösung ist... aber sie funktioniert.
Ich weiß nicht warum das eine Sicherheitseinschränkung sein sollte, aber vielleicht kann das ja mal Jemand erklären.
Grüße
Geändert von garyee (08.10.2014 um 15:05 Uhr)
Weil Du damit das "Alphabet" verkleinerst. Es gibt also weniger unterschiedliche Werte und damit ist es unsicherer.
Beispiel: Stell Dir ein Zahlenschloss vor. Bei vier Stellen (mit Werten von 0,1,...9) gibt es 10 hoch 4 = 10000 Kombinationen.
Wenn ich jetzt den Zeichensatz halbiere (z.B. nur noch 0,1,2,3,4) habe ich nur noch 5 hoch 4 = 625 Kombinationen.
Die wären viel schneller durchprobiert
Der Thread ist zwar schon älter, aber noch ein Hinweis...
Beim ModuleRegistrationExtended sollte bereits innerhalb von "protected function compile()" im Abschnitt "Validate input" der username in Kleinbuchstaben konvertiert werden. Ansonsten gibt's einen unschönen Datenbank-Fehler, falls das Mitglied bereits "in anderer Form" existiert. Das ganze muss natürlich vor der Überprüfung der unique-Felder der Datenbank erfolgen.
Beispiel: Der username "johndoe" ist bereits vorhanden. Nun registriert sich ein anderer Nutzer als "JohnDoe". "JohnDoe" wird erst beim Erzeugen des neuen Users zu "johndoe" konvertiert und versucht in die Datenbank einzutragen. Erst dort wird eine Datenbank-Fehlermeldung erzeugt (duplicate entry ...).
Ich mache das wie folgt:
PHP-Code:
if ($field == 'username')
{
$varValue = strtolower($varValue);
}
// Make sure that unique fields are unique (check the eval setting first -> #3063)
...
Hallo zusammen,
da ich kein Freund davon bin System-Module bzw. deren Klassen zu überschreiben: Man muss immer im Kopf haben, dass wenn man das System aktualisiert, ggf. Änderungen in den Modulen oder Klassen vorhanden sein können, die man dann manuell nachpatchen muss.
Daher kann man das ganze vielleicht einfacher über den Hook - initializeSystem lösen. Alles was man dazu braucht ist ein eigenes Module mit der Registrierung des Hooks.
Da dieser noch vor der Verarbeitung der Anfrage greift, kann man da wunderbar die Benutzereingabe manipulieren bzw. in dem Sinne den Benutzernamen auf kleinbuchstaben setzen.
Hier einfach mal Beispiel-Code:
PHP-Code:
(...)
public function hookInitializeSystem()
{
/* Nur im Frontend-Modus ausführen! */
if(defined('TL_MODE') && TL_MODE == 'FE')
{
/**
* Registrierung/Login
* -> Das Feld Benutzername auf klein setzen
*/
if(isset($_POST['FORM_SUBMIT']) && (\Input::post('FORM_SUBMIT') == 'tl_login' || \Input::post('FORM_SUBMIT') == 'tl_registration'))
{
if(isset($_POST['username'])){
\Input::setPost('username', strtolower(\Input::post('username')));
};
};
}
(...)
};
geht das denn auch beim bearbeiten der Nutzerdaten? Denn da ist im FORM_SUBMIT immer eine ID dabei :/
Liebe Grüße
WebRoxx
Oder kann man den Zeichensatz von Username einfach anpassen das immer alles klein ist ?
Finde das mit Groß/Klein bisschen ungünstig. Kann auch unter den Usern zu Verwechslungen kommen.
Liebe Grüße
WebRoxx
Das ist nicht der Zeichensatz, sondern die Collation (https://dev.mysql.com/doc/refman/5.7...t-general.html).
Wenn Du Deine Datenbank erstellst hast Du wahrscheinlich dort etwas wie utf8_general_ci (ci ... case insensitive). Das würde dann alle Spalten Deiner Datenbank betreffen, außer bei deren Definition wird etwas anderes "gesagt". Und genau das macht Contao in der system/modules/core/dca/tl_member.php (tl_user.php analog) für die Spalte username:
Das könntest Du natürlich in einer eigenen "Erweiterung" oder der system/config/dcaconfig.php überschreiben:PHP-Code:
'username' => array
(
'label' => &$GLOBALS['TL_LANG']['tl_member']['username'],
'exclude' => true,
'search' => true,
'sorting' => true,
'flag' => 1,
'inputType' => 'text',
'eval' => array('mandatory'=>true, 'unique'=>true, 'nullIfEmpty'=>true, 'rgxp'=>'extnd', 'nospace'=>true, 'maxlength'=>64, 'feEditable'=>true, 'feViewable'=>true, 'feGroup'=>'login'),
'sql' => "varchar(64) COLLATE utf8_bin NULL"
),
Damit sollte dann in system/modules/core/library/ContaO/User.php wo der User letztlich mitPHP-Code:
$GLOBALS['TL_DCA']['tl_member']['fields']['username']['sql'] = "varchar(64) COLLATE utf8_general_ci NULL";
gesucht wird der Treffer unabhängig von der Groß-Kleinschreibung (oder mixed case) sein.PHP-Code:
$objResult = $this->Database->prepare("SELECT * FROM " . $this->strTable . " WHERE " . $strColumn . "=?")
->limit(1)
->execute($varValue);
Edit: den Hinweis, den Contao bei gescheitertem Login anzeigt: "Anmeldung fehlgeschlagen (Benutzernamen und Passwörter unterscheiden zwischen Groß- und Kleinschreibung)!" müsstest Du dann natürlich auch noch anpassen, denn die stimmt ja dann nicht mehr und verwirrt den User, was Du ja vermeiden willst.
Geändert von fiedsch (02.03.2017 um 19:56 Uhr)
Contao-Community-Treff Bayern: http://www.contao-bayern.de
mit der Lösung von fiedsch
Funktioniert es perfekt, vorausgesetzt man ändert auch noch "username" in der Datenbank in "utf8_general_ci" mit phpMyAdmin.PHP-Code:
$GLOBALS['TL_DCA']['tl_member']['fields']['username']['sql'] = "varchar(64) COLLATE utf8_general_ci NULL";
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Contao-Community-Treff Bayern: http://www.contao-bayern.de
Ich klinke mich hier mal ein. Ein Kunde hat seine Webseite von mir Updaten lassen (2.x auf 3.5.x). Jetzt laufen im Systemlog jede Menge Fehler auf das sich Benutzer nicht einloggen können. Es liegt daran, dass Sie das erste Zeichen von Ihrem Login groß schreiben....
Ging das in Contao 2 groß- und klein geschrieben?
Auch wenn ich kein großer Fan davon bin.....reicht nur die Anpassung in der dcaconfig.php damit beide Versionen vom Benutzernamen gehen? Bzw. vielleicht gibt es inzwischen eine feinere Lösung? Ich denke es ist nur eine Frage der Zeit bis sich der Kunde diesbezüglich bei mir meldet
VG Frank
Aktive Benutzer in diesem Thema: 2 (Registrierte Benutzer: 0, Gäste: 2)