web-dev-qa-db-ja.com

ルールモジュールを使用して匿名ユーザーをログインページにリダイレクトする方法

匿名ユーザーをログインページにリダイレクトするためにdrupal 7のルールモジュールを使用しているため、イベント「Drupal is initializing」、条件「User has role」に反応するルールを作成しました匿名ユーザーと「サイトログインURLではありません」を使用して、サイトログインURLにアクション「ページリダイレクト」を追加しました。ルールをテストしようとしたときに、drupalがログインページにリダイレクトされ続けましたApacheサーバーが機能しなくなるまで繰り返します。

12
Aboodred1

私がそれを次のように解決した方法:

  • イベント: 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" } } ]
  }
}
12
Aboodred1

/admin/people/permissionsに移動し、[匿名ユーザーの公開コンテンツを表示する]チェックボックスをオフにします

enter image description here

/admin/config/system/site-informationに移動し、[アクセス拒否]ページのフィールドに「ユーザー」を追加します

enter image description here

3
monymirza

ルールでこれを取り除くことができると確信していますが、テーマの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');
}
1
Chance G

ここでの問題は、問題のイベントです。 Drupal is initializingの代わりにContent is viewedをお試しください。

0
joedougherty

これは2年前の投稿です。ただし、ルールを使用して匿名ユーザーをユーザーログインページにリダイレクトするソリューションは次のとおりです。

  • イベント:システムログエントリが作成されます
  • 条件:ユーザーの役割:匿名
  • アクション:ページリダイレクト値:ユーザー

これが誰かを助けることを願っています。

0
Gabke