Компонент подтверждения регистрации ( system.auth.confirmation ) довольно прост. В начале он проверяет авторизирован ли пользователь, иначе активный ли пользователь, и лишь потом обращает внимание на CONFIRM_CODE. При этом конечной точкой является обнуление этого поля( CONFIRM_CODE ).
Мне кажется, что логика этого компонента не верна - ведь пользователь может быть активным благодаря администратору, но содержать CONFIRM_CODE заполненым. Более того то, что пользователю выставлена активность не означает, что он подтвердил свой email! И наоборот если пользователь не активный, это не значит, что подтверждение регистрации должно его активировать, т.к. важен email, а не активность.
Вот примерная последовательность действий по моему мнению более правильная:
1. если полученный USER_ID соответсвует пользователю, тогда получить его данные
2. если пользователь не активирован и выставлен к примеру параметр "активировать после регистрации", тогда продолжить проверку
3. если существует CONFIRM_CODE у пользователя и в присланном параметре
4. если они совпадают тогда обнулить CONFIRM_CODE и если указаный выше параметр установлен в "Y" - активировать пользователя.
во всех остальных случаях выводить ошибку либо форму для заполнения кода.