Как перенаправить пользователей, которые не вошли в систему, когда они переходят на страницу / user? - PullRequest
1 голос
/ 22 апреля 2011

Я работаю над проектом Drupal, в котором пользовательский модуль используется для перенаправления пользователей в другой домен для аутентификации, и я хотел, чтобы страница / user перенаправляла на этот внешний сервер аутентификации, если пользователь не вошел в систему. Как следуетЯ собираюсь сделать это?

Ответы [ 3 ]

4 голосов
/ 22 апреля 2011

Вы можете захватить условие в hook_init, приняв статус входа с помощью user_is_anonymous (), а затем с помощью 1-го аргумента запроса 'user'.

<?php
/**
 * Implements hook_init().
 */
function mycustommodule_init() {
  // if 1st argument is user, and they are not logged in, send them away
  if (user_is_anonymous() && arg(0) == 'user') {
    drupal_goto('http://example.com/login');
  }
}

Если бы вы могли проходить аутентификацию за кулисами с помощью PHP, вы также могли бы сделать вход в систему невидимым, используя hook_user с операцией 'login'.

1 голос
/ 22 апреля 2011

В качестве примеров модулей, реализующих внешнюю аутентификацию, вы можете посмотреть openid.module и http_auth_ext.module .
OpenID использует user_external_load () , что, вероятно, требует использования user_external_login_register () .
Внешняя HTTP-аутентификация использует hook_init () .

function http_auth_ext_init() {
  global $user;
  // Call authentication on any page if it has not been already completed
  if (! $user->uid && ! $_COOKIE['http_auth_ext_complete']) {
    http_auth_ext_login($_SERVER['REMOTE_USER']);
  }
}
1 голос
/ 22 апреля 2011

Я уверен, что вы можете использовать некоторую комбинацию модуля rules и конфигурации actions и triggers.

Когда пользователь находится на странице / пользователь и он не вошел в систему, перенаправьте на x.

...