규칙 모듈을 사용하여 익명 사용자를 로그인 페이지로 리디렉션하는 방법은 무엇입니까?


12

익명 사용자를 로그인 페이지로 리디렉션하기 위해 drupal 7과 함께 규칙 모듈을 사용하고 있으므로 "Drupal is initializing"이벤트, 익명 사용자와 "User has role"상태 및 "site login url이 아님"에 반응하는 규칙을 작성했습니다. "다음 사이트 로그인 URL에"페이지 리디렉션 "작업을 추가했습니다. 내가 규칙을 테스트하려고 할 때; drupal은 아파치 서버가 작동을 멈출 때까지 계속해서 로그인 페이지로 계속 리디렉션됩니다. 모든 권장 사항.


익명 사용자가 사이트 컨텐츠를 탐색 할 수 있습니까? 어떤 이유로 로그인 페이지를 리디렉션해야합니까?
monymirza

익명 사용자는 사이트 콘텐츠를 탐색 할 수 없으며 초대를 제외하고 등록 할 수 없습니다. 사이트를 사용하려면 로그인해야합니다.
Aboodred1

이 부분은 "규칙 drupal이 로그인 페이지를 표시하지 않고 계속 리디렉션합니다." 무슨 뜻인지 설명해 주시겠습니까? 그렇지 않으면 어떤 부분이 작동하지 않는지 잘 모르겠습니다.
Boriana Ditcheva 18시 37 분

홈 페이지 나 다른 페이지로 이동했지만 로그인 페이지가 아닌 경우 규칙이 제대로 작동합니다. 사용자를 로그인 페이지로 리디렉션하지만 브라우저는 아파치가 작동을 멈출 때까지 계속 로그인 페이지로 리디렉션합니다.
Aboodred1 1

익명 사용자가 모든 사이트 콘텐츠를 탐색 할 수 없습니다 경우, 다음 뷰의 컨텐츠에 권한을 제거
monymirza

답변:


12

내가 해결 한 방법은 다음과 같습니다.

  • 이벤트 : Drupal이 초기화 중
  • 정황:

    1. 사용자에게 역할이 있습니다 -Parameter: User: [site:current-user], Roles: anonymous user
    2. NOT 텍스트 비교 -Parameter: Text: [site:current-page:url], Matching text: user/login
  • 작업 : 페이지 리디렉션 -Parameter: URL: user/login


다음과 같이 내보내기 규칙 :

{ "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" } } ]
  }
}

이 드루팔 7입니다 @TopTomato
Aboodred1

오류가 발생하여 작동합니다.
TopTomato

@TopTomato 최고! 그것이 당신을 위해 일하게되어 기쁘다.
Aboodred1

3

/admin/people/permissions익명 사용자를 위해 공개 된 컨텐츠보기 를 선택 취소하십시오.

여기에 이미지 설명을 입력하십시오

이제 /admin/config/system/site-information(액세스 거부) 페이지 필드에 '사용자' 를 추가하십시오.

여기에 이미지 설명을 입력하십시오


좋은 해결 방법이지만 모든 사용자에게 동일한 권한이있는 것은 아니므로 액세스 거부 페이지를 표시해야합니다. 도와 주셔서 감사합니다.
Aboodred1 1

다음 2 단계에서 페이지 필드 (액세스 거부)에서 '사용자'제거
monymirza

내가 제거하면; 익명 사용자는 로그인 페이지로 리디렉션하지 않고 액세스 거부 만 볼 수 있습니다. 규칙 모듈에서 할 수있는 방법이 있다고 확신합니다
Aboodred1

예. 또한 rules 모듈로 수행 할 수 있습니다. 트리거 코어 모듈을 통해 수행 할 수도 있습니다.
monymirza

1
누군가 액세스가 거부
되었다고해서

1

규칙을 사용 하여이 작업을 수행 할 수 있다고 확신하지만 테마의 template.php 파일에서도 쉽게 수행 할 수 있습니다.

이와 같은 것이 작동해야합니다.

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

또는 사용자 / 등록 및 사용자 / 암호 페이지에 여전히 액세스하려는 경우 :

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

감사합니다 @ 찬스 질문을 게시하기 전에 이미이 솔루션을 찾았습니다. 규칙 모듈을 사용하고 싶거나 적어도 "Drupal이 초기화 중입니다"와 작동하지 않는 이유를 이해하고
싶습니다

@ 찬스, 궁금합니다. 이것은 .theme 파일 내 어디에 있습니까?
TikaL13

0

여기서 문제는 해당 이벤트입니다. 대신에 Drupal is initializing시도하십시오 Content is viewed.


이 질문을 게시하기 전에 시도해 보았지만보기 페이지, 등록 페이지, 기본적으로 노드가 아닌 모든 페이지를 제외하고는 나에게 잘 작동했습니다.
Aboodred1

0

나는 이것이 2 년 전의 게시물이라는 것을 알고 있습니다. 그러나 익명 사용자를 규칙을 사용하여 사용자 로그인 페이지로 리디렉션하는 솔루션은 다음과 같습니다.

  • 이벤트 : 시스템 로그 항목이 생성됩니다
  • 조건 : 사용자의 역할 : 익명
  • 액션 : 페이지 리디렉션 값 : 사용자

이것이 누군가를 도울 수 있기를 바랍니다.


여기에 게시하기 전에 솔루션을 사용해 보셨습니까?
Aboodred1 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.