Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: http://redaxo.org/slack/
derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Community: Passwort vergessen -> neues Passwort anlegen

8. Jun 2015, 18:14

Hallo,

ich möchte über einen Passwort-Vergessen-Link den User auffordern, ein neues Passwort anzulegen. Dazu habe ich (analog zu dem Community-Demo-Paket) eine entsprechende Seite mit einem XForm-Formular angelegt, wo der User seine E-Mail eingibt und nach Prüfung eine Mail bekommt mit einem Link (mit angehängten Aktivierungscode und E-Mail-Adresse) zu dem Artikel, wo er das Passwort ändern kann. Bis dahin funktioniert auch alles, wie es soll.

Nur auf der Zielseite selbst habe ich ein Problem. Dort habe ich folgende XForm-Konfiguration verwendet (auch analog zum Demo Paket bzw. zu diesem Artikel: https://github.com/yakamara/redaxo_comm ... -loginlink):

Code: Alles auswählen

hidden|status|1
objparams|submit_btn_show|1
objparams|send|1|init

validate|com_auth_login|activation_key=rex_com_activation_key,email=rex_com_email|status=1|Zugang wurde bereits bestätigt oder ist schon fehlgeschlagen|status

action|html|<section class="content-block">
action|html|<div class="double-col left password">
password|password|Neues Passwort
action|html|</div>
action|html|<div class="clearer"></div>
action|html|</section>

action|html|<section class="content-block">
action|html|<div class="double-right left password">
password|password_2|Passwort wiederholen||no_db
action|html|</div>
action|html|<div class="clearer"></div>
action|html|</section>

validate|empty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein

action|html|<section class="content-block">
action|html|<div class="double-col left register">
action|showtext||Ihre Daten wurden aktualisiert. Das neue Passwort ist ab sofort aktiv.||1
action|html|</div>
action|html|<div class="clearer"></div>
action|html|</section>

com_auth_password_hash|password|password|
action|com_auth_db|update
Leider funktioniert das so irgendwie nicht - es kommt immer die hinterlegte Fehlermeldung "Zugang wurde bereits bestätigt oder ist schon fehlgeschlagen" und das Passwort wird auch nicht geändert.

Kann mir da vielleicht jemand auf die Sprünge helfen, wo der Fehler liegt?

Vielen Dank!!

Gruß,
Michael

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: Community: Passwort vergessen -> neues Passwort anlegen

8. Jun 2015, 19:26

Probiers mit ner Testinstallation und der Community Demo und wenns da geht schau was du anderes gemacht hast ;)

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

9. Jun 2015, 00:05

Hi RexDude,

ähm, ich habe doch die Community-Demo als Vorlage genommen - dort wird über die Passwort-Vergessen-Funktion allerdings nur das vorhandene Passwort an den User verschickt. Ich wollte aber erreichen, dass der Benutzer sich ein neues Passwort anlegt. Dazu bekommt dieser eine E-Mail mit einem Link zu der entsprechenden Seite - das funktioniert ja auch wie gesagt.

Nur eben das Neuanlegen des Passworts funzt mit meiner XForm-Definiton nicht. Als Basis hierfür habe ich die Definition der Registrierung-Bestätigung aus der Community-Demo verwendet (wegen der Datenübertragung aus der Mail -> validate|com_auth_login| ...). Irgendwas habe ich bei meiner Ergänzung aber wohl falsch gemacht ... aber was? :(

Hier nochmal die XForm-Konfuguration ohne mein HTML-Gedöns:

Code: Alles auswählen

hidden|status|1
objparams|submit_btn_show|1
objparams|send|1|init

validate|com_auth_login|activation_key=rex_com_activation_key,email=rex_com_email|status=1|Zugang wurde bereits bestätigt oder ist schon fehlgeschlagen|status

password|password|Neues Passwort
password|password_2|Passwort wiederholen||no_db

validate|empty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein

action|showtext||Ihre Daten wurden aktualisiert. Das neue Passwort ist ab sofort aktiv.||1

com_auth_password_hash|password|password|
action|com_auth_db|update
Gruß,
Michael

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

10. Jun 2015, 20:46

Hi,

da ich das mit der bisherigen XForm-Konfiguration irgendwie nicht hinbekomme, habe ich mir überlegt, per rex_get den Aktivation-Key und die E-Mail-Adresse aus der URL zu holen, die der User per E-Mail bekommen hat.

Jetzt wäre nur die Frage, wie ich per XForm das neu eingegebene Passwort und den Passwort-Hash dem entsprechenden Nutzer in der User-DB zuordne - kann mir da jemand einen Tipp geben?

Vielen Dank für Eure Hilfe!

Gruß,
Michael

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: Community: Passwort vergessen -> neues Passwort anlegen

11. Jun 2015, 07:50

Vielleicht hilfts wenn du XForm mit PHP baust:
Thread: http://www.redaxo.org/de/forum/addons-f ... ml#p108487
Beispiel (siehe Ausgabe): http://www.redaxo.org/de/download/modul ... &cat_id=-1

Dann bist du völlig frei noch extra zeugs nach submit zu machen.

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

12. Jun 2015, 00:59

Hi,

hab das jetzt auf die Weise gemacht. Ich hole mir über rex_get(..) meine beiden Werte ...

Code: Alles auswählen

$activation_key = rex_get('rex_com_activation_key','string');
$email = rex_get('rex_com_email','string');
... was auch funktioniert. Dann lege ich mir (neben den anderen Feldern) zwei "hidden"-Fields an, in die ich die Werte reinschreibe:

Code: Alles auswählen

$xform->setValueField("hidden",array('ackey',$activation_key,'','no_db'));
$xform->setValueField("hidden",array('eml',$email,'','no_db'));
Damit die Daten nach dem Versenden in die DB geschrieben werden, verwende ich folgenden Code:

Code: Alles auswählen

if (($form = $xform->getForm()) == '') {
	// Formular wurde verschickt
	
	$formData = $xform->objparams['value_pool']['email'];
	
	$sql = rex_sql::factory();
	$sql->debugsql = 1;
	$sql->setTable($REX['TABLE_PREFIX'] . 'com_user');
	$sql->setWhere("activation_key='" . $formData['ackey'] . "' AND email='" . $formData['eml'] . "'");
	$sql->setValue('password', $formData['password']);
	
	if ($sql->update()) {
		$cont_output .= 'Ihre Daten wurden aktualisiert.';
	} else {
		$cont_output .= 'Es ist ein Fehler aufgetreten.';
	}
	
} else {
	// Formular anzeigen
	$cont_output .= $t2 . $form . $b . $b;
}

 [...]
Jetzt mein Problem: Kann es sein, dass im Valuepool die Werte aus "hidden"-Feldern nicht gespeichert werden? Jedenfalls werden diese Werte in der setWhere-Anweisung nicht ausgegeben. Wenn ich aber statt der "hidden"-Felder testhalber normale Text-Felder verwende, klappt das auf einmal... ?!

Woran kann das liegen? :(

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: Community: Passwort vergessen -> neues Passwort anlegen

12. Jun 2015, 09:19

Gute Frage. Das muss wohl jemand aus dem Core-Team beantworten.
Kannst du nicht als Workaround über rex_post() an die hidden Felder kommen sonst auch?

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

14. Jun 2015, 23:48

Hi RexDude,

vielen Dank für Deinen Tipp!! Nur leider klappt das auch nicht, obwohl ich nicht weiß warum - weil eigentlich müßte der Workaround so funktionieren (nach meinem dafürhalten), weil das Formular doch per POST verschickt wird... Aber irgendwie ist da scheinbar der Wurm drin ... Seufz... :(

Also, weiß denn jemand vom Core-Team vielleicht einen Rat? Please help! Bin langsam mit meiner "Weisheit" am Ende ...

Danke!

Gruß,
Michael

Sysix
Beiträge: 101
Registriert: 23. Sep 2014, 15:08

Re: Community: Passwort vergessen -> neues Passwort anlegen

15. Jun 2015, 10:26

Hallo,

ich hab mal bisschen rumgeschaut und folgendes Gefunden:

Code: Alles auswählen

$xform->setHiddenField($name, $value);
und mit den Code kannst du den Value wieder auslesen:

Code: Alles auswählen

$value = $xform->objparams['form_hiddenfields'][$key];
Ich hab nirgendwo gefunden, dass die Felder hier abgespeichert werden:

https://github.com/yakamara/redaxo_xfor ... ddenfields

Gruß Sysix

wolfgang
Beiträge: 126
Registriert: 20. Okt 2005, 20:52
Wohnort: 23966 Tressow
Kontaktdaten: Website

Re: Community: Passwort vergessen -> neues Passwort anlegen

15. Jun 2015, 11:36

Da bin ich auch schon drüber gestolpert. Das hidden Feld braucht ein REQUEST.

Also z.B.
$xform->setValueField("hidden",array('ackey',$activation_key,'REQUEST','no_db'));

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

16. Jun 2015, 03:35

Ich bin hier bald am Verzweifeln ... das funktioniert beides auch nicht... Was habe ich denn in meinem Formular bloß für'n blöden Fehler drin??? :cry:

@Sysix: An welche Stelle in der XForm-Konfiguration muss denn "$value = $xform->objparams['form_hiddenfields'][$key];" eingefügt werden - in der Abfrage für nach Abschicken des Formulars? Ich nehme an, das $key der Name des Hidden-Fields ist, oder? Und ersetzt das "$xform->setHiddenField($name, $value);" das "$xform->setValueField("hidden",...)"? Ich weiß, Fragen über Fragen .. :wink: :(

Danke nochmal für Eure Mühe!!!

Gruß, Michael

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

16. Jun 2015, 03:46

P.S.: Hier ist nochmal mein aktuelles Skript:

Code: Alles auswählen

<?php

$activation_key = rex_get('rex_com_activation_key','string');
$email = rex_get('rex_com_email','string');
// Diese Daten kommen an, dass habe ich geprüft.

$xform = new rex_xform;

$xform->setObjectparams("form_action", rex_getUrl($REX['ARTICLE_ID']));
$xform->setObjectparams("submit_btn_show", false);

$xform->setHiddenField('ackey', $activation_key);
$xform->setHiddenField('eml', $email);

// Wrapper-SECTION
$xform->setValueField("html",array('label','<section class="content-block">'));
$xform->setValueField("html",array('label','<div class="register-col left password">'));

// Eingabe Passwort
$xform->setValueField("password",array('password','Neues Passwort'));

// Passwort wiederholen
$xform->setValueField("html",array('label','<div class="register-col right password">'));
$xform->setValueField("password",array('password_2','Password bestätigen','','no_db'));
$xform->setValueField("html",array('label','</div>'));

$xform->setValueField("html",array('label','<div class="clearer"></div>')); // Clearer-DIV

// Passwort verschlüsseln
$xform->setValueField("com_auth_password_hash",array('password_hash','password'));

// Submit
$xform->setValueField("html",array('label','<div class="double-col left register">'));
$xform->setValueField("submit", array('submit','Senden','no_db'));
$xform->setValueField("html",array('label','</div>'));

$xform->setValueField("html",array('label','<div class="clearer"></div>')); // Clearer-DIV
$xform->setValueField("html",array('label','</section>')); // .content-block

// Eingaben überprüfen (Pflichtfelder)
$xform->setValidateField('empty', array('password','Bitte geben Sie ein Passwort ein.'));
$xform->setValidateField('compare', array('password','password_2','Bitte geben Sie zweimal das gleiche Passwort ein.'));


// Daten verarbeiten
if (($form = $xform->getForm()) == '') {
	
	// Formular wurde verschickt
	
	$formData = $xform->objparams['value_pool']['email'];
	
	$ackey = $xform->objparams['form_hiddenfields']['ackey'];
	$eml = $xform->objparams['form_hiddenfields']['eml'];
	
	$sql = rex_sql::factory();
	
	$sql->debugsql = 1;
	
	$sql->setTable($REX['TABLE_PREFIX'] . 'com_user');
	$sql->setWhere("activation_key='" . $ackey . "' AND email='" . $eml . "'");
	$sql->setValue('password', $formData['password']);
	
	if ($sql->update()) {
		
		$cont_output .= $t2 . '<section class="content-block">';
		
		$cont_output .= $t3 . '<div class="double-col left register">' ;
		$cont_output .= $t4 . '<div class="form-success"><span class="msg"><i class="fa fa-check"></i> Ihre Daten wurden aktualisiert. Das neue Passwort ist ab sofort aktiv.</span><span class="bklnk"><a href="' . rex_getUrl($REX['START_ARTICLE_ID']) . '">###linktext_zurueck_startseite###</a></span><div class="clearer"></div></div>';
		$cont_output .= $t3 . '</div>';
		
		$cont_output .= $t2 . '</section>';
		
	} else {
		$cont_output .= 'Es ist ein Fehler aufgetreten.';
	}
	
	
} else {

	// Formular anzeigen
	$cont_output .= $t2 . $activation_key . ' / ' . $email;
	$cont_output .= $t2 . $form;
	
}

?>
Gruß, Michael

derkrebs
Beiträge: 149
Registriert: 4. Okt 2011, 17:27

Re: Community: Passwort vergessen -> neues Passwort anlegen

16. Jun 2015, 12:01

Hi,

ääähm, man sollte vielleicht nicht mehr so spät am Abend programmieren - mit Wolfgangs Tipp funktioniert es nun doch! Die richtige Reihenfolge beim Abfragen der Variablen sollte man dann allerdings einhalten... :roll:

So funktionierts natürlich nicht:

Code: Alles auswählen

if (($form = $xform->getForm()) == '') {

	[...]

	$ackey = $formData['ackey'];
	$eml = $formData['eml'];

	$formData = $xform->objparams['value_pool']['email'];
	
	[..]

}
Aber so:

Code: Alles auswählen

if (($form = $xform->getForm()) == '') {

	[...]

	$formData = $xform->objparams['value_pool']['email'];

	$ackey = $formData['ackey'];
	$eml = $formData['eml'];
	
	[..]

}
:wink:

Danke für Eure Hilfe!

Gruß, Michael

Zurück zu „Allgemeines [R4]“