Анонимы видят форму логин-пароль. Поскольку на сайте аутентификация через апач (модуль securesite), логин форма по адресу drupal/user не нужна. В любом случае, спасибо за ответ. Оч. надеюсь решить вопрос.
Проверьте значение глобальных переменных $user и $user->uid, если они равны "0", "false", либо вообще не определены (через isset(имя_переменной)), то пользователь анонимный и его надо перенаправить.
Только не забудьте написать global $user в начале.
А если ввести проверку на анонимность пользователя в page.tpl.php? Только конечно перед этим проверить является ли страница user/*. Если мне нужно изменить показ какой-либо страницы, делаю изменения в этом файле, все работает безошибочно.
Переходом на страницу.
Сайт имеет несколько скрытых страниц через node_access плюс форум, все разделы которого также закрыты от анонимов.
Модуль securesite. Если аноним заходит на запрещенную страницу, то видит окно аутентификации Apache. Если пароля нет, или он неверный, securesite адресует анонима к форме восстановления пароля. Если верный, после входа происходит редирект на "главную" страницу для пользователей.
Соответственно, если после входа перейти по ссылке drupal/logout или ?q=logout, следовало бы ждать просто завершения сессии и т.п. Сессия действительно завершается, однако, по дороге всплывает всё то же окно аутентификации (от которого, собственно, ничего не зависит). Возможно это как-то связано с установками редиректа в модуле user... пока не понимаю.
А это не может быть из-за того, что просто securesite так работает? Не пробовали проверять его на новом пустом друпал-сайте? Может стоит покопать в направлении этого модуля?
Комментарии
Ну, отключите Анонимам возможность просматривать профайлы!
Настройки - управление доступом.
Анонимы видят форму логин-пароль. Поскольку на сайте аутентификация через апач (модуль securesite), логин форма по адресу drupal/user не нужна. В любом случае, спасибо за ответ. Оч. надеюсь решить вопрос.
поставьте синоним.... и на другой страничке напишите что данная страница недоступна или ещё что то! Можете хоть картинку вогнать.
Нельзя ли это сделать через override user-profile.tpl.php, т.е что-то вроде
"если пользователь авторизован, то print $user_profile"
???
можно написать что-то вроде
if ($рольпользователя == номерролигостя) {
drupal_goto('404');
}
Можете написать в user-pofile.tpl.php (в начало):
<?php
global $user;
if ($user->uid==0) {drupal_goto('404');}
?>
Должно сработать.
Для других ролей работает. С uid=0 почему-то не получается... (
Проверьте значение глобальных переменных $user и $user->uid, если они равны "0", "false", либо вообще не определены (через isset(имя_переменной)), то пользователь анонимный и его надо перенаправить.
Только не забудьте написать global $user в начале.
Вроде теперь должно быть... но почему-то не работает.
Отправьте свой код. Посмотрим.
$user->uid это номер пользователя а не номер роли
А кто вообще говорил про роли. Нам нужен анонимный пользователь, а $user->uid==0 это и есть он.
Ситуация следующая. В файле modules/user/user.pages.inc в конце есть функция:
<?php function user_page() {
global $user;
if ($user->uid) {
menu_set_active_item('user/'. $user->uid);
return menu_execute_active_handler();
}
else {
return drupal_get_form('user_login');
}
}
?>
Соотв. нужно "перекрыть" строчку с else - заменить на
<?php print drupal_goto('404'); ?>
А вы не пробовали в modules/user/user-profile.tpl.php мой код ставить?
Пробовал. Форма все равно остается.
Пока закомментировал строчку c login_form в user.pages.inc.
Хотелось бы, конечно, иначе... но никакие изменения в user-profile ни к чему не привели.
А если ввести проверку на анонимность пользователя в page.tpl.php? Только конечно перед этим проверить является ли страница user/*. Если мне нужно изменить показ какой-либо страницы, делаю изменения в этом файле, все работает безошибочно.
Надо попробовать...
Параллельно возник вопрос с logout. При включенном securesite (basic auth.) друпал на выходе запрашивает логин и пароль... почему?
Никогда не сталкивался с такой проблемой. А как вы вообще выполняете logout? Переходом на страницу ?q=logout или иначе?
Переходом на страницу.
Сайт имеет несколько скрытых страниц через node_access плюс форум, все разделы которого также закрыты от анонимов.
Модуль securesite. Если аноним заходит на запрещенную страницу, то видит окно аутентификации Apache. Если пароля нет, или он неверный, securesite адресует анонима к форме восстановления пароля. Если верный, после входа происходит редирект на "главную" страницу для пользователей.
Соответственно, если после входа перейти по ссылке drupal/logout или ?q=logout, следовало бы ждать просто завершения сессии и т.п. Сессия действительно завершается, однако, по дороге всплывает всё то же окно аутентификации (от которого, собственно, ничего не зависит). Возможно это как-то связано с установками редиректа в модуле user... пока не понимаю.
А это не может быть из-за того, что просто securesite так работает? Не пробовали проверять его на новом пустом друпал-сайте? Может стоит покопать в направлении этого модуля?
По некоторым соображениям решили теперь отказаться от этого модуля.
Большое спасибо за советы, по дороге многое для себя узнал .)