Прикручиваем OpenID к друпалу версии 5.х

  • OpenID — это открытая децентрализованная система единого входа, которая позволяет использовать один логин и пароль на большом количестве сайтов. Подробности на openid.net

Для интеграции OpenID в друпал существует замечательный модуль openid.

Однако после активации этого модуля вас ждет неприятный сюрприз — по-умолчанию пользователю предлагается пройти стандартную для друпала авторизацию\регистрацию, а openid-вход является лишь альтернативным способом, выбрать который пользователь может нажав на ссылку рядом с блоком входа в систему.

Исправить ситуацию можно двумя способами — сделав OpenID для друпала единственной дверью в ваш сайт, либо просто предпочтительной, но не убирая стандартную регистрацию.

Вариант первый — openid единственный возможный способ авторизации и регистрации на вашем сайте.


  • Необходимо добавить следующий код в template.php-файл вашей темы:

    // заменяем форму входа /user
    function phptemplate_user_login($form) {
      return _phptemplate_callback('user_login', array('form' => $form));
    }<br><br>
    // заменяем форму регистрации /user/register
    function phptemplate_user_register($form) {
      return _phptemplate_callback('user_register', array('form' => $form));
    }<br>
    // заменяем форму восстановления забытого пароля /user/password
    function phptemplate_user_pass($form) {
      return _phptemplate_callback('user_pass', array('form' => $form));
    }
     
    // заменяем блок входа в систему
    function phptemplate_user_login_block($form) {
      // show hint in form element
      $form['openid_url']['#value'] = 'OpenID Login';
      // remove hint in form element on focus
      $form['openid_url']['#attributes'] = array('onfocus' => "javascript:openid_url.value=''");
      return _phptemplate_callback('user_login_block', array('form' => $form));
    }
  • Создаем файл "user_register.tpl.php" и кидаем в папке темы.
    Содержимое файла:
    drupal_add_js('$(document).ready(function(){$("#edit-openid-url-wrapper").show();$("#edit-name-wrapper").hide();$("#edit-pass-wrapper").hide();$("a.openid-link").hide();$("a.user-link").show();});', 'inline');
    print(drupal_render($form));
  • Создаем файл "user_login.tpl.php" и кидаем в папке темы.
    Содержимое файла:
    Establish your OpenID at openid.net
  • Создаем файл "user_pass.tpl.php" и кидаем в папке темы.
    Содержимое файла:
    Visit your OpenID provider to recover your password.
  • Создаем файл "user_login_block.tpl.php" и кидаем в папке темы.
    Содержимое файла:
    drupal_add_js('$(document).ready(function(){$("#edit-openid-url-wrapper").show();$("#edit-name-wrapper").hide();$("#edit-pass-wrapper").hide
    ();$("a.openid-link").hide();$("a.user-link").show();});', 'inline');<br>
     
    print(drupal_render($form['form_id']));
    print(drupal_render($form['openid_url']));
    print(drupal_render($form['submit']));
Вариант второй — OpenID является предпочтительным, но не единственным способом авторизации на сайте.



В данном случае необходимо омыть руки кровью стандартного модуля друпала user.module
Поехали?
Первым делом ищем в user.module функию user_login_block() и добавляем строку '#type' => 'hidden', в элементы $form['name'], $form['pass'], $form['submit'].
Теперь, чуть ниже исправленного текста, необходимо найти строки:

$items[] = l(t('Create new account'), 'user/register', array('title' => t('Create a new user account.')));
$items[] = l(t('Request new password'), 'user/password', array('title' => t('Request new password via e-mail.')));

Эти строки надо закомментировать, т.е. поставить перед каждой из них по два слеша — //
Мы просто скрыли стандартную форму входа на сайт, оставив OpenID-вход, не уходя с головой в редактирование модулей.

Комментарии

Добавить комментарий

Адрес показан не будет
CAPTCHA
Антибот
Как оформить комментарий?