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


12

匿名ユーザーをログインページにリダイレクトするために、Drupal 7でルールモジュールを使用しているため、イベント「Drupal is initializing」、条件「User has role」を匿名ユーザー、「Not site login url」に反応するルールを作成しました」、次にアクション「ページリダイレクト」をサイトログインURLに追加しました。ルールをテストしようとしたとき; drupalは、Apacheサーバーが動作しなくなるまで何度もログインページにリダイレクトし続けました。推奨事項。


匿名ユーザーはサイトのコンテンツを探索できますか?ログインページをリダイレクトする必要がある理由は何ですか?
monymirza

匿名ユーザーは、サイトのコンテンツを閲覧したり、招待状を除いて登録することはできません。ユーザーはサイトを使用するためにログインする必要があります。
Aboodred1

この部分は「ルールdrupalが表示せずにログインページにリダイレクトし続けた」とは理解できません。どういう意味ですか?それ以外の場合、どの部分が機能していないかがわかりません。
ボリアナディチェバ

ログインページではなく、ホームページまたは他のページにアクセスすると、ルールは正常に機能します。ユーザーをログインページにリダイレクトしますが、ブラウザはApacheが動作しなくなるまでログインページに何度もリダイレクトし続けます。
Aboodred1

匿名ユーザーがサイトコンテンツを閲覧することを許可されていない場合、コンテンツを表示する権限を削除します
-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" } } ]
  }
}

@TopTomatoこれはdrupal 7
Aboodred1

私はエラーを犯し、それは働いています。
-TopTomato

@TopTomato素晴らしい!喜んでくれました。
-Aboodred1

3

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

ここに画像の説明を入力してください

/admin/config/system/site-information(アクセスが拒否されました)ページフィールドに「ユーザー」を追加します

ここに画像の説明を入力してください


回避策はありますが、すべてのユーザーが同じ権限を持っているわけではないため、アクセス拒否ページを表示する必要があります。私はあなたの助けに感謝します。
Aboodred1

次に、2番目のステップで(アクセスが拒否された)ページフィールドから「ユーザー」を削除します
-monymirza

削除した場合; 匿名ユーザーは、ログインページにリダイレクトせずに拒否されたアクセスのみを表示できます。ルールモジュールでそれを行うことができる方法があると確信しています
Aboodred1

はい。さらにルールモジュールで行うことができます。トリガーコアモジュールを介して行うこともできます。
monymirza

1
誰かがアクセス拒否を持っている場合、彼らはログインしていませんという意味ではありません。この回答を参照してください
Tanvirアフマド

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');
}

@Chanceに感謝します。質問を投稿する前に、このソリューションを既に見つけました。ルールモジュールを使用するか、少なくとも「Drupalが初期化しています」で動作しない理由を理解したい
-Aboodred1

@チャンス、私は興味があります。これは.themeファイル内のどこにありますか?
TikaL13

0

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


この質問を投稿する前に試してみましたが、ビューページ、登録ページ、基本的にノードではないページを除き、問題なく機能しました。
Aboodred1

0

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

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

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


ここに投稿する前にソリューションを試しましたか?
Aboodred1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.