При регистрации OpenID-аккаунта процесс заканчивается с ошибкой, несмотря на корректное заполнение всех форм и корректный ответ OpenID-провайдера.
Последовательность действий для воспроизведения проблемы:
- Пытаемся зайти на главной странице с неизвестным diary.ru OpenID.
- Получаем сообщение «для авторизации с использованием OpenID Вам необходимо привязать Ваш OpenID к существующему аккаунту на @дневниках, либо зарегистрировать OpenID-аккаунт.», выбираем «перейти к регистрации.»
- Переходим на страницу регистрации с
?openid_uri=...
в URI, подтверждаем согласие с правилами
- Выполняется переход на OpenID-провайдера, даем разрешение на передачу identity-информации.
- Возвращаемся на diary.ru, на страницу с предложением заполнения профиля, где в поле логина виден некий фрагмент HTML (ok, черт с ним), заполням поля.
- Получаем ошибку «OpenID не подтвержден; регистрация невозможна.»
читать дальшеДополнительные примечания:
- Проблема не вызвана поведением OpenID-провайдера — он корректно принимается как другими потребителями, так и самим diary.ru при привязке к уже существующему аккаунту, как и при последующем входе.
- При последующей попытке не-OpenID («классической») регистрации в пределах сессии после заполнения формы возникает такое же сообщение про ошибку OpenID. Какие-то данные об OpenID где-то «залипают», хотя я так и не понял что именно это было.
- При отказе OpenID-провайдера о предоставлении данных, несмотря даже на явный возврат с
openid.mode=cancel
, мы узнаем об этом только после заполнения формы. Более разумным, возможно, было бы полноценно проверить ответ сразу после возврата от провайдера с сохранением одноразовых данных об успешной аутентификации в сессии на сервере.
- (Не имеет отношения к проблеме) Понять какие поля при регистрации обязательны, а какие нет — не самая тривиальная задача. Например, описание поля даты рождения своим «если вы введете здесь» никак этому не способствует.
Проверка производилась с собственным сервером с библиотекой OpenID-провайдера vooid (Django-приложение, использует python-openid).
@Ответ: Передано программисту.