Also mich hat das auch gestört, dass man zu einem späteren Zeitpunkt (Shop ist schon mehrere Jahre in Betrieb und stand im Vorfeld auf 5 Stellen für das Passwort) dies nun nicht mehr in den Minimal Werten (Admin Bereich) ändern kann, da immer die JS Abfrage nach der Länge des derzeitigen Passwortes anspringt. So kann der Kunde sein derzeitigen Passwort nicht ändern. Ich treib das mal voran, den ich sehe dies als Funktionsfehler an.
Die Funktion habe ich nun geändert wie folgt:
Zunächst erfolgt in der login.php erst einmal eine Abfrage wie viele Stellen der Kunde in das Passwort Feld eintippt. Stimmt das Passwort und es erfolgt ein Zugang, dann wird er umgeleitet auf die account_password.php mit dem Hinweis er möge sein Passwort auf mindestens 8 Stellen ändern.
Hierzu die erfolderlichen Schritte:
1. login.php
if ($_SESSION['cart']->count_contents() > 0 && !isset($_GET['review_prod_id']) && !isset($_GET['order_id'])) { xtc_redirect
(xtc_href_link
(FILENAME_SHOPPING_CART
),'NONSSL'); } elseif (isset($_GET['review_prod_id'])) { xtc_redirect
(xtc_href_link
(FILENAME_PRODUCT_REVIEWS_WRITE
, xtc_product_link
((int
)$_GET['review_prod_id'],''), 'NONSSL')); } elseif (isset($_GET['order_id'])) { xtc_redirect
(xtc_href_link
(FILENAME_ACCOUNT_HISTORY_INFO
, 'order_id=' .(int
)$_GET['order_id'], 'NONSSL')); } else { xtc_redirect
(xtc_href_link
(FILENAME_DEFAULT
),'NONSSL'); } in diese ändern (die 5 kann auf jede beliebige Zahl geändert werden, muss aber mit der Zahl der alten Mindesstellenanzahl der Konfiguration übereinstimmen. Bei mir waren es halt 5 Stellen.)
if(strlen($password) <= 5){ xtc_redirect
(xtc_href_link
(FILENAME_ACCOUNT_PASSWORD
, 'pw=5#passchange'),'NONSSL'); } else { if ($_SESSION['cart']->count_contents() > 0 && !isset($_GET['review_prod_id']) && !isset($_GET['order_id'])){ xtc_redirect
(xtc_href_link
(FILENAME_SHOPPING_CART
),'NONSSL'); } elseif (isset($_GET['review_prod_id'])){ xtc_redirect
(xtc_href_link
(FILENAME_PRODUCT_REVIEWS_WRITE
, xtc_product_link
((int
)$_GET['review_prod_id'],''), 'NONSSL')); } elseif (isset($_GET['order_id'])){ xtc_redirect
(xtc_href_link
(FILENAME_ACCOUNT_HISTORY_INFO
, 'order_id=' .(int
)$_GET['order_id'], 'NONSSL')); } else { xtc_redirect
(xtc_href_link
(FILENAME_DEFAULT
),'NONSSL'); } } bei der Weiterleitung seht ihr, dass
pw=5#passchange mit übergeben wird. Brauchen wir später.
Folgende Dateien sind zu ändern:
-------------------------------------------------
In der
includes\form_check.js.php die Funktion:
function check_password_new ändern. Dies kann getrost passieren, da diese Funktion nur bei der Passwort ändern benutzt wird und sonst an keiner Stelle mehr im Shop.
Zeile:
if (password_current == '' || password_current.length < field_size) {
ändern in:
if (password_current == '' {
damit ist die Java Abfrage nach der Länge des alten Passworts weg.
-------------------------------------------------
In der Datei
account_password.phpAbschnitt:
if (isset ($_POST['action']) && ($_POST['action'] == 'process')) { $password_current = xtc_db_prepare_input
($_POST['password_current']); $password_new = xtc_db_prepare_input
($_POST['password_new']); $password_confirmation = xtc_db_prepare_input
($_POST['password_confirmation']); $error = false; if (strlen($password_current) < ENTRY_PASSWORD_MIN_LENGTH
) { $error = true; $messageStack->add('account_password', ENTRY_PASSWORD_CURRENT_ERROR
); } elseif (strlen($password_new) < ENTRY_PASSWORD_MIN_LENGTH
) { $error = true; $messageStack->add('account_password', ENTRY_PASSWORD_NEW_ERROR
); } elseif ($password_new != $password_confirmation) { $error = true; $messageStack->add('account_password', ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING
); } if ($error == false) { $check_customer_query = xtc_db_query
("select customers_password from ".TABLE_CUSTOMERS
." where customers_id = '".(int
) $_SESSION['customer_id']."'"); $check_customer = xtc_db_fetch_array
($check_customer_query); if (xtc_validate_password
($password_current, $check_customer['customers_password'])) { xtc_db_query
("UPDATE ".TABLE_CUSTOMERS
." SET customers_password = '".xtc_encrypt_password
($password_new)."', customers_last_modified=now() WHERE customers_id = '".(int
) $_SESSION['customer_id']."'"); xtc_db_query
("UPDATE ".TABLE_CUSTOMERS_INFO
." SET customers_info_date_account_last_modified = now() WHERE customers_info_id = '".(int
) $_SESSION['customer_id']."'"); $messageStack->add_session('account', SUCCESS_PASSWORD_UPDATED
, 'success'); xtc_redirect
(xtc_href_link
(FILENAME_ACCOUNT
, '', 'SSL')); } else { $error = true; $messageStack->add('account_password', ERROR_CURRENT_PASSWORD_NOT_MATCHING
); } }} ändern in:
// WM geändert: Funktion der alten Passwortlängen Überprüfung entfernt,// da der Kunde sonst sein zu kurzes Passowrt nicht auf ein längeres ändern kannif (isset ($_POST['action']) && ($_POST['action'] == 'process')) { $password_current = xtc_db_prepare_input
($_POST['password_current']); $password_new = xtc_db_prepare_input
($_POST['password_new']); $password_confirmation = xtc_db_prepare_input
($_POST['password_confirmation']); $error = false; if (strlen($password_new) < ENTRY_PASSWORD_MIN_LENGTH
) { $error = true; $messageStack->add('account_password', ENTRY_PASSWORD_NEW_ERROR
); } elseif ($password_new != $password_confirmation) { $error = true; $messageStack->add('account_password', ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING
); } if ($error == false){ $check_customer_query = xtc_db_query
("select customers_password from ".TABLE_CUSTOMERS
." where customers_id = '".(int
) $_SESSION['customer_id']."'"); $check_customer = xtc_db_fetch_array
($check_customer_query); if (xtc_validate_password
($password_current, $check_customer['customers_password'])){ xtc_db_query
("UPDATE " . TABLE_CUSTOMERS
. " SET customers_password = '" . xtc_encrypt_password
($password_new) . "', customers_last_modified=now() WHERE customers_id = '" .(int
)$_SESSION['customer_id'] . "'"); xtc_db_query
("UPDATE " . TABLE_CUSTOMERS_INFO
. " SET customers_info_date_account_last_modified = now() WHERE customers_info_id = '" . (int
)$_SESSION['customer_id'] . "'"); $messageStack->add_session('account', SUCCESS_PASSWORD_UPDATED
, 'success'); xtc_redirect
(xtc_href_link
(FILENAME_ACCOUNT
, '', 'SSL')); } else { $error = true; $messageStack->add('account_password', ERROR_CURRENT_PASSWORD_NOT_MATCHING
); } }} Somit ist hier auch die Abfrage der Mindeslänge auch weg.
in der Datei:
templates\dein template\module\account_password.htmlfolgendes einfügen:
unter:
{if $error!=''}<div class="errormessage">{$error}</div>{/if}
dies eintragen:
{if $PASSWORD_5}<a name="passchange"></a><p class="inputRequirement">Sie müssen Ihr Passwort anpassen, da ihr Passwort nur aus 5 Zeichen besteht!</p>{/if}
Wie ihr dass formatiert und ausgebt bleibt euch überlassen. Den Anker könnt ihr natürlich weglassen. Wenn ja dann sollte der auch nicht aus der login.php mit übergeben werden.
Damit sollte das Problem gelöst sein. Ist was für das kommende Release.
Bevor ihr Änderungen macht -
Sicherung anlegen und achtet darauf, dass euer Admin Passwort vor den Änderungen länger oder gleich der neuen Stellenvorgabe ist.