Допустим нам надо не просто изменить пароль, а с подтверждением старого. Предлагаю свое решение.
Прежде всего позаботимся о форме. Нам нужен вот такой вид примерно:
Просто берем и кидаем на страницу обычное изменения профиля:
А дальше хитрый финт — убираем все поля, оставляя только пароль и подтверждение пароля, плюс добавляем поле «старый пароль». А чтобы система не ругалась на отсутствие важных полей (мыло/логин), делаем их скрытыми:
Визуал готов, осталось проверять старый пароль при сохранении. Как это делать? Поможет нам обработчик события OnBeforeUserUpdate:
1. В Apache AcceptPathInfo по дефолту, в конфигурациях nginx тоже встречается не редко (с помощью split_path_info). Увы и ах, но реалии именно таковы. 2. Нужно найти _все_ публично доступные скрипты с модификацией профиля пользователя, что не всегда тривиально
Я к тому, что например, если послать запрос по урлу "/profile/password/index.php/blah/blah/blah.php", то будет выполнен скрипт "/profile/password/index.php", а "/blah/blah/blah.php" уйдет в path_info. При этом по историческим причинам CAllMain::getCurDir работает на основании REQUEST_URI, а значит скорее всего для такого урла вернет "/profile/password/index.php/blah/blah/", что совсем не подпадает под твою проверку;-)
В общем, я бы как минимум заменил эту проверку по строгому совпадению на префиксную (ака CAllSite::inDir). Как-то так:-)
Антон, на универсальность не претендую =) Не, можно добавить ещё пару строк, если надо. Но у меня стояла конкретная задача, под конкретный проект. А далее, все просто, привязываем клиента к себе через техподдержку. Не хорошо, но что делать.
Скриптики выслал на почту, если адрес всё тот же +)
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».