Народ, есть вопрос по OpenID в друпале 5.2. Для авторизации по openid я пытаюсь использовать вот этот модуль: http://drupal.org/project/openid
Он не работает. Когда я пытаюсь авторизоваться по openid с аккаунта на livejournal.com, то получаю ошибку "не введен адрес email" и предложение ввести его вручную.
Посмотрев код, я увидел следующее: при авторизации по openid модуль создает нового пользователя (если такого еще нет), а данные о регистрации пытается получить с openid-провайдера. В данном случае это livejournal. Вроде все правильно, так и должно быть. Проблема в том, что либо livejournal не предоставляет емыл пользователя, либо модуль его не может прочитать. Вот кусок соответствующего кода:
$edit['name'] = (empty($response['openid.sreg.nickname'])) ? $identity : $response['openid.sreg.nickname'];
$edit['mail'] = (empty($response['openid.sreg.email'])) ? '' : $response['openid.sreg.email'];
$edit['pass'] = user_password();
$edit['status'] = variable_get('user_register', 1) == 1;
$edit['response'] = $response;
$edit['auth_openid'] = $identity;
$form['#post'] = $edit;
drupal_prepare_form('user_register', $form);
drupal_validate_form('user_register', $form);
В процессе выполнения поле $edit['mail'] не заполняется, а остается пустым. Соответственно, регистрация пользователя валится на этапе drupal_validate_form.
Я сделал грубый хак - добавил заполнение емыла, в случае, если он не получен от openid-провайдера, фиксированным емылом. В этом случае авторизация проходит "на ура", новый пользователь создается. Но все остальные openid-пользователи, естественно, авторизоваться не могут. Потому что тогда регистрация валится уже на ошибке "такой емыл уже существует".
Соответственно, вопросы:
1. Почему емыл не берется от openid-провайдера? Это проблема livejournal (может это он не предоставляет емыл) или модуля (не читает его корректно)?
2. Можно ли разрешить регистрацию пользователя без пароля? Тогда бы и фиг с ним, что он не заполнен, и не нужно. Главное, чтобы авторизация по openid проходила.
Комментарии
Это проблема livejournal (может это он не предоставляет емыл) или модуля (не читает его корректно)?
Это проблема livejournal. Используйте другие серверы openid.
Я сделал грубый хак - добавил заполнение емыла, в случае, если он не получен от openid-провайдера, фиксированным емылом.
Не надо делать грубых хаков - надо мягче, мягче...
А зачем фиксированным-то? Формируйте его в зависимости от юзернейма и адреса удаленного сервера. Тогда получите уникальное мыло.
Это проблема livejournal. Используйте другие серверы openid.
Это без вариантов, к сожалению. Я делаю авторизацию по openid именно для livejournal-юзеров. Просто так исторически сложилось, что их больше. И никто из них не использует других openid.
Не надо делать грубых хаков - надо мягче, мягче...
Ну это я просто для тестирования. Чтобы удостовериться, что проблема в непередаче емыла.
А зачем фиксированным-то? Формируйте его в зависимости от юзернейма и адреса удаленного сервера. Тогда получите уникальное мыло.
Это, конечно, вариант... Но у меня еще и прикручено оповещение о комментариях по почте. Соответственно, не хотелось бы отсылать письма на несуществующие емылы. Хотя как раз в случае livejournal можно генерить емылы программно, и они будут соответствовать реальным. Спасибо за наводку, попробую так и реализовать.
Решил проблему, спасибо за помощь. Кому интересно, детали реализации здесь.
Я смотрю там календарик стоит. Глючит он гад. создаёт ноды типа:
http://www.solargate.ru/avtorizaciya-po-openid-v-drupal-5-x?mini=calenda...
http://www.solargate.ru/avtorizaciya-po-openid-v-drupal-5-x?mini=calenda...
и до бесконечности. яндекс завалить может страницу. Надо багрепорт писать.
>Я смотрю там календарик стоит. Глючит он гад. создаёт ноды типа:
А я как-то и не обратил внимания. А есть ли какие-нибудь аналоги этого модуля (Calendar)?
Оказалось, что в модуле OpenID нет реализации OpenID-сервера. Судя по коду, какие-то его зачатки есть, но не работает. Я нашел простое решение, через подключение phpMyOpenID. Вот здесь описано, как это делается.
Вопрос - насколько такое решение корректно с точки зрения архитектуры друпала?