Jak przekierować anonimowych użytkowników na stronę logowania przy użyciu modułu Reguły?


12

Korzystam z modułu reguł z drupal 7, aby przekierowywać anonimowych użytkowników na stronę logowania, więc utworzyłem regułę reagując na zdarzenie „Inicjowanie Drupala”, warunek „Użytkownik ma rolę” z anonimowym użytkownikiem i „URL logowania poza witrynę ”, a następnie dodano akcję„ Przekierowanie strony ”do adresu URL logowania do witryny. Kiedy próbowałem przetestować regułę; Drupal ciągle przekierowywał na stronę logowania, aż serwer Apache przestał działać. Wszelkie rekomendacje.


czy anonimowy użytkownik może przeglądać zawartość witryny? z jakiego powodu trzeba przekierować stronę logowania?
— monymirza

anonimowi użytkownicy nie mogą przeglądać treści witryny i nie mogą się rejestrować z wyjątkiem zaproszenia. Użytkownicy muszą się zalogować, aby korzystać ze strony.
— Aboodred1,

Nie rozumiem tej części „zasada drupal ciągle przekierowuje na stronę logowania, nie pokazując jej”. Czy możesz wyjaśnić, co masz na myśli? W przeciwnym razie nie jestem pewien, czy rozumiem, która część nie działa.
— Boriana Ditcheva

Kiedy przechodzę do strony głównej lub innej strony, ale nie loguję się, reguła działa poprawnie; przekierowuje użytkownika na stronę logowania, jednak przeglądarka ciągle przekierowuje na stronę logowania, aż apache przestanie działać.
— Aboodred1,

jeśli anonimowi użytkownicy nie mogą przeglądać treści witryny, usuń uprawnienia do przeglądania treści
— monymirza

Odpowiedzi:


12

Sposób, w jaki to rozwiązałem, jest następujący:

  • Wydarzenia: Drupal inicjuje się
  • Warunki:

    1. Użytkownik ma role (role) -Parameter: User: [site:current-user], Roles: anonymous user
    2. NIE Porównanie tekstu -Parameter: Text: [site:current-page:url], Matching text: user/login
  • Działania: Przekierowanie strony -Parameter: URL: user/login


Eksportuj regułę w następujący sposób:

{ "rules_login" : {
    "LABEL" : "login",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "login" ],
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "user_has_role" : {
          "account" : [ "site:current-user" ],
          "roles" : { "value" : { "1" : "1" } }
        }
      },
      { "NOT text_matches" : { "text" : [ "site:current-page:url" ], "match" : "user\/login" } }
    ],
    "DO" : [ { "redirect" : { "url" : "user\/login" } } ]
  }
}

@TopTomato to jest dla drupal 7
— Aboodred1

popełniłem błąd i działa.
— TopTomato

@TopTomato Awesome! Cieszę się, że to zadziałało.
— Aboodred1,

3

Idź, aby /admin/people/permissionsodznaczyć Wyświetl opublikowane treści dla anonimowych użytkowników

wprowadź opis zdjęcia tutaj

teraz przejdź do /admin/config/system/site-informationpola „użytkownik” w polu (odmowa dostępu)

wprowadź opis zdjęcia tutaj


dobrze się obejść, ale nadal muszę wyświetlać stronę, do której odmówiono dostępu, ponieważ nie wszyscy użytkownicy mają takie same uprawnienia. Doceniam twoją pomoc.
— Aboodred1,

następnie usuń „użytkownik” z pola strony (odmowa dostępu) w 2 kroku
— monymirza

jeśli go usunę; anonimowi użytkownicy widzą tylko odmowę dostępu bez przekierowywania na stronę logowania. Jestem pewien, że mogę to zrobić w module reguł
— Aboodred1,

tak. dalej można to zrobić za pomocą modułu reguł. możesz to również zrobić za pomocą modułu rdzenia wyzwalacza.
— monymirza

1
Jeśli ktoś ma odmowę dostępu, nie oznacza to, że nie jest zalogowany. Zobacz tę odpowiedź
— Tanvir Ahmad

1

Jestem pewien, że możesz to zrobić za pomocą reguł, ale łatwo byłoby to zrobić również w pliku template.php kompozycji.

Coś takiego powinno działać:

global $user;
if ($user->uid == 0 && arg(0) != 'user' && arg(1) != 'login'){
  drupal_goto('user/login');
}

Lub, jeśli nadal potrzebny jest dostęp do stron użytkownik / rejestracja i użytkownik / hasło:

global $user;
if ($user->uid == 0 && arg(0) != 'user'){
  drupal_goto('user/login');
}

Dzięki @Chance Znalazłem już to rozwiązanie, zanim opublikowałem swoje pytanie. Chcę użyć modułu reguł lub przynajmniej zrozumieć, dlaczego nie działa z „Inicjowaniem Drupala”
— Aboodred1,

@Chance, jestem ciekawa. Gdzie by to było w pliku .theme?
— TikaL13,

0

Problemem jest dane wydarzenie. Zamiast tego Drupal is initializingspróbuj Content is viewed.


Próbowałem, zanim opublikowałem to pytanie i działało dobrze ze mną, z wyjątkiem stron przeglądania, strony rejestracji, w zasadzie każdej strony, która nie jest węzłem.
— Aboodred1,

0

Wiem, że to post sprzed dwóch lat. Jednak rozwiązanie przekierowujące anonimowego użytkownika na stronę logowania użytkownika z regułami jest następujące:

  • zdarzenie: wpis dziennika systemu jest tworzony
  • warunek: Użytkownik ma role: anonimowy
  • akcja: wartość przekierowania strony: użytkownik

Mam nadzieję, że to komuś pomoże.


wypróbowałeś swoje rozwiązanie przed opublikowaniem go tutaj?
— Aboodred1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.