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

#drupal #authentication #drupal-6 #login

#drupal #drupal-6 #аутентификация

Вопрос:

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

Ответ №1:

Вы можете зафиксировать условие в 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() amp;amp; arg(0) == 'user') {
    drupal_goto('http://example.com/login');
  }
}
  

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

Ответ №2:

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

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

Ответ №3:

В качестве примеров модулей, реализующих внешнюю аутентификацию, вы могли бы посмотреть на 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 amp;amp; ! $_COOKIE['http_auth_ext_complete']) {
    http_auth_ext_login($_SERVER['REMOTE_USER']);
  }
}