Я делаю это по-другому.Я создаю динамический объект под записью пользователя, срок действия которого истекает через несколько дней, с сгенерированным атрибутом uid;отправьте им ссылку, содержащую этот uid;это приводит к странице смены пароля, но вошел в систему через другой LoginModule, который видит параметр UID, проверяет его, и, если присутствует и исправляет, регистрирует их. Другими словами, это своего рода «входной билет».
Код, который выполнял поиск, связывал / переподключался как само приложение, но на самом деле это не имело значения, поскольку соединение для входа в систему немедленно закрывалось, как и все остальные соединения LDAP в приложении.Когда что-то делается с собственной записью пользователя, например, смена пароля, обновление профиля, выполняется повторное подключение в качестве этого пользователя с использованием пароля, который я сохранил в сеансе.Когда пользователь делает что-то еще с LDAP, это действительно приложение, которое выполняет связывание / переподключение приложения, как описано выше.IOW само приложение - это пользователь (или даже несколько разных пользователей с разными уровнями разрешений).
Поскольку UID намного длиннее, чем пароль, и потому что срок действия записи, содержащей его, истекает через день или два, всеэто гораздо более безопасно, чем генерация временного пароля и его доставка.На странице смены пароля также может быть секретный вопрос, если он будет достигнут через вход в систему.