Passwort wird nicht verschickt
am 17.09.2009 - 16:53 Uhr in
Ich bin mir nicht sicher, aber irgendwie scheint ein Bug in Drupal 6.13 zu sein. Meine Einstellungen zur Benutzerverwaltung:
- "Besucher können neue Benutzerkonten beantragen, die jedoch von einem Administrator freigeschaltet werden müssen."
Nun Bearbeite ich die E-Mails die an den Benutzer geschickt werden:
"Willkommen, erwarte Freigabe für Verwaltung" und "E-Mail bei Benutzerkonto-Aktivierung".
In beide trage ich das erlaubte !password ein um dem Benutzer sein Passwort zu schicken, doch nur bei der Aktivierungsmail kommt es an. Bei der anderen steht einfach !password drin.
- Anmelden oder Registrieren um Kommentare zu schreiben

Warum dieser Weg?
am 18.09.2009 - 03:09 Uhr
Ich habe das eben mit einer Drupal 6.13-Installation ausprobiert. Habe denselben Effekt. Bei der "Willkommen, erwarte Freigabe für Verwaltung" wird ein Passwort verschickt. Bei der "E-Mail bei Benutzerkonto-Aktivierung"-Mail steht nur !password drin.
Aber warum willst du da ein Passwort verschicken? Der übliche Drupal-Weg ist ein Link, den der neue User anklickt. Damit kommt er ins System und kann selbst ein Passwort vergeben. Das kappt genausogut. Bzw. ist insofern besser, als dass der User sein Passwort selbst wählen kann.
--
textformer mediendesign | Webkrauts
Meine Benutzer sind nicht so
am 18.09.2009 - 08:35 Uhr
Meine Benutzer sind nicht so bewandert und mögen das nicht. Sie wollen eine Mail mit Passwort und User und fertig.
Außerdem stellt sich nicht die Frage warum ich das so will, sondern was ich nun mache dass es funktioniert ;) Hat jemand eine Idee woran es liegen könnte?
Debug
am 18.09.2009 - 08:54 Uhr
Probier mal Folgendes (zur Fehlersuche machen wir jetzt mal ein wenig Debugging):
Öffne die Datei modules/user/user.module und füge zwischen Zeile 2098 und 2099 folgenden Code ein (ja, wir verändern mal kurz den Core; das wird aber wieder rückgängig gemacht):
<?phpdrupal_set_message('<pre>'. print_r($account, 1) .'</pre>');
drupal_set_message('<pre>'. print_r($tokens, 1) .'</pre>');
?>
Die Funktion
user_mail_tokenssollte dann also so aussehen:<?phpfunction user_mail_tokens($account, $language) {
global $base_url;
$tokens = array(
'!username' => $account->name,
'!site' => variable_get('site_name', 'Drupal'),
'!login_url' => user_pass_reset_url($account),
'!uri' => $base_url,
'!uri_brief' => preg_replace('!^https?://!', '', $base_url),
'!mailto' => $account->mail,
'!date' => format_date(time(), 'medium', '', NULL, $language->language),
'!login_uri' => url('user', array('absolute' => TRUE, 'language' => $language)),
'!edit_uri' => url('user/'. $account->uid .'/edit', array('absolute' => TRUE, 'language' => $language)),
);
if (!empty($account->password)) {
$tokens['!password'] = $account->password;
}
drupal_set_message('<pre>'. print_r($account, 1) .'</pre>');
drupal_set_message('<pre>'. print_r($tokens, 1) .'</pre>');
return $tokens;
}
?>
Jetzt verschicke die Mails mal und schau, was da so beim Benutzeraccount und in den Tokens steht.
Möglicherweise ist das Kennwort leer?
Stefan
--
sei nett zu Deinem Themer
Dass das Kennwort leer ist
am 21.10.2010 - 22:36 Uhr
Dass das Kennwort leer ist glaub ich nicht, sonst würde es doch bei der ersten Mail nicht drin stehen! Hier die Ausgabe:
#
stdClass Object
(
[uid] => 13
[name] => eins
[pass] => e9eebf5849dbbebcc156e1d52cb5dbd9
[mail] => user@mail.de
[mode] => 0
[sort] => 0
[threshold] => 0
[theme] =>
[signature] =>
[signature_format] => 0
[created] => 1253261746
[access] => 0
[login] => 0
[status] => 0
[timezone] => 7200
[language] =>
[picture] =>
[init] => user@mail.de
[data] => a:2:{s:13:"form_build_id";s:37:"form-5760506ece58708e72635337c32434a0";s:7:"contact";i:1;}
[form_build_id] => form-5760506ece58708e72635337c32434a0
[contact] => 1
[roles] => Array
(
[2] => authenticated user
)
[profile_name] => eins
[profile_vorname] => eins
[profile_firma] => eins
[profile_adresse] => eins
[profile_telefon] => eins
[profile_gabelstapler] => 1
[profile_krane] => 0
[password] => U4w2gmcbpJUU
)
#
Array
(
[!username] => eins
[!site] => testseite
[!mailto] => user@mail.de
[!date] => 18. September 2009 - 9:15
[!password] => U4w2gmcbpJUU
)
#
stdClass Object
(
[uid] => 13
[name] => eins
[pass] => e9eebf5849dbbebcc156e1d52cb5dbd9
[mail] => user@mail.de
[mode] => 0
[sort] => 0
[threshold] => 0
[theme] =>
[signature] =>
[signature_format] => 0
[created] => 1253261746
[access] => 0
[login] => 0
[status] => 0
[timezone] => 7200
[language] =>
[picture] =>
[init] => user@mail.de
[data] => a:2:{s:13:"form_build_id";s:37:"form-5760506ece58708e72635337c32434a0";s:7:"contact";i:1;}
[form_build_id] => form-5760506ece58708e72635337c32434a0
[contact] => 1
[roles] => Array
(
[2] => authenticated user
)
[profile_name] => eins
[profile_vorname] => eins
[profile_firma] => eins
[profile_adresse] => eins
[profile_telefon] => eins
[profile_gabelstapler] => 1
[profile_krane] => 0
[password] => U4w2gmcbpJUU
)
#
Array
(
[!username] => eins
[!site] => testseite
[!mailto] => user@mail.de
[!date] => 18. September 2009 - 9:15
[!password] => U4w2gmcbpJUU
)
# Danke, dass Sie ein Benutzerkonto angefordert haben. Ihr Benutzerkonto muss noch vom Administrator der Website freigeschaltet werden.
In der Zwischenzeit wurde eine Willkommens-E-Mail mit einer Anleitung an Ihre Adresse geschickt.
Token
am 18.09.2009 - 09:24 Uhr
Ok, das Token ist also korrekt gesetzt. Bist Du sicher, dass Du das Token (
!passwordauch wirklich im Mailtext drin hast? Falls der letzte Eintrag im Quote von eben der Text ist, steht da nirgends ein!password.hth,
Stefan
--
sei nett zu Deinem Themer
Ganz sicher. Hier die Mail
am 21.10.2010 - 22:36 Uhr
Ganz sicher. Hier die Mail zum entsprechenden User:
Guten Tag $profile_name eins,
Ihr Benutzerkonto auf testseite ist nun freigeschaltet. Sie können sich zukünftig über
!password
Das $profile_name ist ein Test von mir, denn es gibt bei mir die Felder Vorname und Name und ich würde die Leute gerne mit Namen ansprechen, klappt aber leider nicht.
Token
am 18.09.2009 - 09:45 Uhr
Schade.
Möglicherweise hat
strtrein Problem mit Ersetzungen am Zeilenanfang (was ein PHP-Bug wäre).Versuch mal Folgendes in der Mail:
"Ihr Kennwort lautet: !password"
Vielleicht funktioniert es ja damit.
Kann auch nicht, da die Variablen über Token eingefügt werden. Dazu müsste das User-Modul ein neues Token bereitstellen, dass dann mit den entsprechenden Werten gefüllt wird.
Vielleicht hilft da dieser Beitrag weiter.
hth,
Stefan
--
sei nett zu Deinem Themer
Ein PHP Bug? Soll ich mal
am 18.09.2009 - 10:00 Uhr
Ein PHP Bug? Soll ich mal PHP updaten?
"Ihr Kennwort lautet: !password" hilft auch nix.
Fehler
am 18.09.2009 - 10:18 Uhr
Ein PHP Bug? Soll ich mal PHP updaten?
Nee, musst Du nicht. Wenn das auch anders nicht funktioniert, kann das kein Fehler sein (klingt irgendwie seltsam :-) ).
Puh, so langsam weiss ich auch nicht wirklich weiter.
Was sagt denn ein
<?phpdrupal_set_message('<pre>'. print_r($variables, 1) .'</pre>');
?>
user_mail)?hth,
Stefan
--
sei nett zu Deinem Themer
Wie soll das dann aussehen?
am 18.09.2009 - 11:00 Uhr
Wie soll das dann aussehen? Wenn ich es einfach so einfüge kommt ein Error:
function user_mail($key, &$message, $params) {$language = $message['language'];
$variables = user_mail_tokens($params['account'], $language);
<?php
drupal_set_message('<pre>'. print_r($variables, 1) .'</pre>');
?>
$message['subject'] .= _user_mail_text($key .'_subject', $language, $variables);
$message['body'][] = _user_mail_text($key .'_body', $language, $variables);
}
PHP
am 18.09.2009 - 11:35 Uhr
Die php-Tags musst Du natürlich weglassen. Die Funktion ist ja schon im Sprachkontext PHP (wenn man das mal so ausdrücken mag).
Stefan
--
sei nett zu Deinem Themer
Und was möchtest du nun
am 18.09.2009 - 11:52 Uhr
Und was möchtest du nun haben? Nur wissen ob es funktioniert oder eine Ausgabe? Es funktioniert auch damit nicht :(
These
am 18.09.2009 - 12:08 Uhr
Ich habe auch nochmal drüber nachgedacht und folgende Idee dazu: Wenn sich der neue User registriert, erzeugt Drupal das Passwort. Zu diesen Zeitpunkt kennt Drupal das reale Passwort und das md5-Passwort. Drupal kann das Passwort als plain text verschicken. Nun kommt es darauf an, was Drupal in der Datenbank speichert. Ich nehme an, dass nur das md5-Passwort gespeichert wird. In dem Fall kann Drupal bei seiner zweiten Mail das !password nicht auflösen, weil es das codierte Passwort nicht zurückrechnen kann. In der Mail kann nur dann das richtige Passwort stehen, wenn es sich Drupal sich für diesen Fall zusätzlich als plain text merkt.
Kann man einfach in der Datenbank nachschlagen, ob dem so ist oder nicht. Ich habe mir die Mühe jetzt gerade nicht gemacht.
--
textformer mediendesign | Webkrauts
Mir deucht du hast keine
am 18.09.2009 - 12:12 Uhr
Mir deucht du hast keine Ahnung was
<?phpdrupal_set_message('<pre>'. print_r($variables, 1) .'</pre>');
?>
macht :-)
Das gibt dir den Inhalt von $variables aus, immer wenn die Funktion user_mail aufgerufen wird. Also registrier dich mal bei deiner Seite oder tu was auch immer du tun musst, damit einem neuen benutzer ne Mail zugeschickt bekommt. in $variables sind die Tokens gespeichert, dass heißt wenn user_mail aufgerufen wird kriegst ne Drupal-Message und kannst in der Message dann gucken ob der Token für dein Passwort leer is.
Also These das klingt
am 18.09.2009 - 12:14 Uhr
Also These das klingt logisch! Aber an wen kann man sich jetzt wenden? Soll der Thread verschoben werden von Anfängerfragen?
Ich hab grad mal auf 6.14 geupdated, leider ohne Erfolg :(
Was tun?
am 18.09.2009 - 12:39 Uhr
Aber an wen kann man sich jetzt wenden?
Naja, um meine These zu überprüfen: Leg einen neuen User an. Merk dir das Passwort aus der generierten Mail. Und dann schau in die Datenbank, ob bei dem User nur das md5-Passwort gespeichert wurde - oder außerdem auch das plain-text-Passwort.
Falls nur das md5-Passwort gespeichert wurde, müsstet du den Anmeldenprozess so umschreiben, dass das System sich auch das plain-text-Passwort merkt. Wenn der Admin den User freischaltet, kann die zweite E-Mail mit dem plain-text-Passwort verschickt werden und du musst das plain text Passwort dann aus der Datenbank löschen.
Wobei es natürlich seinen Sinn hat, dass das Passwort codiert wird. Es sollen ja keine plain-text-Passworte in der Datenbank stehen.
--
textformer mediendesign | Webkrauts
Nicolai Schwarz
am 18.09.2009 - 13:32 Uhr
Wobei es natürlich seinen Sinn hat, dass das Passwort codiert wird. Es sollen ja keine plain-text-Passworte in der Datenbank stehen.
Und genau das lässt mich solangsam zweifeln ob es sich um einen Programmier Bug oder einen Beschreibungs Bug handelt! In der Beschreibung zum Feld "E-Mail bei Benutzerkonto-Aktivierung" steht zwar dass im Text !password erlaubt sei, aber vielleicht sollte das da einfach nicht stehen ;)
PHP kann ich gar nicht und somit kann ich auch nix dran rumprogrammieren ...
<?php PHP kann ich gar nicht
am 18.09.2009 - 14:04 Uhr
PHP kann ich gar nicht und somit kann ich auch nix dran rumprogrammieren ...
wie heißt es doch so schön, es ist nie zu spät etwas neues zu lernen :-)
MD5
am 18.09.2009 - 14:06 Uhr
Das Passwort ist nur als MD5-Hash abgelegt und nicht als Klartext.
Beste Grüße
Werner