Username bei Registrierung überprüfen
Eingetragen von Klalaus (11)
am 09.01.2010 - 01:02 Uhr in
am 09.01.2010 - 01:02 Uhr in
Hi,
ich würde gerne bei der Registrierung den Username überprüfen und bei bestimmten Kriterien nicht zulassen. Zunächst wollte ich das ganze über Rules machen aber dann werden auch schon vorhandene Usernamen geblockt.
Ich will z.B. (ist nur ein Beispiel) alle Namen mit einem "a" bei einer Registrierung nicht zulassen, vorhandene Namen mit "a" sollen aber davon nichts merken.
Danke!
- Anmelden oder Registrieren um Kommentare zu schreiben
Validierung
am 09.01.2010 - 10:12 Uhr
Mit Rules kannst Du nur eingreifen, wenn der Account bereits erstellt ist.
Schreibe Dir ein kleines Modul und implementiere dort hook_user.
Dort behandelst Du dann den Fall
$op == 'validate'
.Beispiel:
<?php
function mymodule_user($op, &$edit, &$account, $category) {
// Validate account data on registering new users.
if ($op == 'validate' && $category == 'account' && !isset($account->uid)) {
if (!mymodule_validate_username($account->name)) {
form_set_error('name', t('Username cannot contain "a".'));
}
}
}
?>
hth,
Stefan
--
Sei nett zu Deinem Themer!
Achsoo =) Mir ist gerade
am 09.01.2010 - 11:31 Uhr
Achsoo =)
Mir ist gerade eine kleines Licht aufgegangen. Mit den hooks das hatte ich immer nicht verstanden aber das ist ja wirklich nicht so schwer :)
Was ist eigentlich wenn man zwei Module hat die beide das gleiche hooken? Welches bekommt dann denn den Vorrang?
Vielen Dank schonmal! :)
Weight
am 09.01.2010 - 12:52 Uhr
Was ist eigentlich wenn man zwei Module hat die beide das gleiche hooken? Welches bekommt dann denn den Vorrang?
Ausgeführt werden alle Module, die einen hook implementieren.
Entscheidend sein kann jedoch die Reihenfolge (z.B. wenn man in einem Modul Felder erwartet, die von einem anderen Modul hinzugefügt werden).
Es wird nach folgender Sortierung gearbeitet:
- Wert der Spalte
weight
in der Tabelle{system}
für das entsprechende Element (Element mit niedrigstem Wert kommt zuerst)- bei gleichem weight -> alphabetisch
hth,
Stefan
--
Sei nett zu Deinem Themer!
Ah super, ich dank dir =)
am 09.01.2010 - 15:47 Uhr
Ah super, ich dank dir =)
Sorry ich muss doch nochmal
am 09.01.2010 - 16:38 Uhr
Sorry ich muss doch nochmal was nachfragen...
Irgendwie ist $account->name immer leer und kann deshalb auch nicht überprüft werden. Ich hab mal ein "echo $account->name;" (ohne "") vor der Abfrage eingebaut und es wird nichts angezeigt. Bei "echo 'irgendwas'" aber schon...
debug
am 09.01.2010 - 17:13 Uhr
<?php
drupal_set_message('<pre>' . var_export($account, 1) . '</pre>');
?>
hth,
Stefan
--
Sei nett zu Deinem Themer!
Ah das ist nützlich, danke
am 09.01.2010 - 17:30 Uhr
Ah das ist nützlich, danke =)
Ich habs jetzt hingekriegt mit $account["name"] anstelle von $account->name obwohl mir eigentlich das zweite auch geläufiger ist aber naja solange es klappt ;)
Dank dir nochmal!
Objekt vs. Array
am 09.01.2010 - 17:56 Uhr
Ah hm. Ich war davon ausgegangen, dass
$account
ein Objekt (eine Klasse) wäre.Es ist jedoch ein Array.
Hm, in der Doku steht auch "The user object". Merkwürdig. Gleich mal nachprüfen ...
--edit--
Ok, hier mal zur Klärung für zukünftige Generationen:
Direkt nach dem Anlegen eines Benutzers (registrieren) ist
$account
ein Array (und kann dementsprechend mittels$account['name']
angesprochen werden). Ansonsten ist es ein Objekt (und reagiert auf$account->name
).Stefan
--
Sei nett zu Deinem Themer!
Sehr seltsam! oO?
am 09.01.2010 - 18:55 Uhr
Sehr seltsam! oO?