OpenID в Drupal 5.2

Главные вкладки

Аватар пользователя SolarWind SolarWind 11 сентября 2007 в 15:13

Народ, есть вопрос по OpenID в друпале 5.2. Для авторизации по openid я пытаюсь использовать вот этот модуль: http://drupal.org/project/openid

Он не работает. Когда я пытаюсь авторизоваться по openid с аккаунта на livejournal.com, то получаю ошибку "не введен адрес email" и предложение ввести его вручную.

Посмотрев код, я увидел следующее: при авторизации по openid модуль создает нового пользователя (если такого еще нет), а данные о регистрации пытается получить с openid-провайдера. В данном случае это livejournal. Вроде все правильно, так и должно быть. Проблема в том, что либо livejournal не предоставляет емыл пользователя, либо модуль его не может прочитать. Вот кусок соответствующего кода:

    $form = drupal_retrieve_form('user_register');
    $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 проходила.

Комментарии

Аватар пользователя beer_destroyer beer_destroyer 11 сентября 2007 в 17:07

Это проблема livejournal (может это он не предоставляет емыл) или модуля (не читает его корректно)?

Это проблема livejournal. Используйте другие серверы openid.

Я сделал грубый хак - добавил заполнение емыла, в случае, если он не получен от openid-провайдера, фиксированным емылом.

Не надо делать грубых хаков - надо мягче, мягче... Smile

А зачем фиксированным-то? Формируйте его в зависимости от юзернейма и адреса удаленного сервера. Тогда получите уникальное мыло.

Аватар пользователя SolarWind SolarWind 11 сентября 2007 в 18:04

Это проблема livejournal. Используйте другие серверы openid.

Это без вариантов, к сожалению. Я делаю авторизацию по openid именно для livejournal-юзеров. Просто так исторически сложилось, что их больше. И никто из них не использует других openid.

Не надо делать грубых хаков - надо мягче, мягче... Smile

Ну это я просто для тестирования. Wink Чтобы удостовериться, что проблема в непередаче емыла.

А зачем фиксированным-то? Формируйте его в зависимости от юзернейма и адреса удаленного сервера. Тогда получите уникальное мыло.

Это, конечно, вариант... Но у меня еще и прикручено оповещение о комментариях по почте. Соответственно, не хотелось бы отсылать письма на несуществующие емылы. Хотя как раз в случае livejournal можно генерить емылы программно, и они будут соответствовать реальным. Спасибо за наводку, попробую так и реализовать.

Аватар пользователя andron13 andron13 12 сентября 2007 в 15:03

Я смотрю там календарик стоит. Глючит он гад. создаёт ноды типа:
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...
и до бесконечности. яндекс завалить может страницу. Надо багрепорт писать. Sad

Аватар пользователя SolarWind SolarWind 12 сентября 2007 в 15:07

>Я смотрю там календарик стоит. Глючит он гад. создаёт ноды типа:

А я как-то и не обратил внимания. Sad А есть ли какие-нибудь аналоги этого модуля (Calendar)?

Аватар пользователя SolarWind SolarWind 13 сентября 2007 в 15:03

Оказалось, что в модуле OpenID нет реализации OpenID-сервера. Судя по коду, какие-то его зачатки есть, но не работает. Я нашел простое решение, через подключение phpMyOpenID. Вот здесь описано, как это делается.

Вопрос - насколько такое решение корректно с точки зрения архитектуры друпала?