অজ্ঞাতনামা ব্যবহারকারীকে লগইন পৃষ্ঠাতে পুনর্নির্দেশ করুন


14

আমি চাই যদি ব্যবহারকারী লগ ইন না করে এবং আমার আরএসটি ভিউএস রাউটার ব্যতীত আমার ওয়েবসাইটের কোনও পৃষ্ঠায় যান তবে আমি তাকে / তাকে পুনরায় ডুপাল 8 এ লগইন পৃষ্ঠাতে পাঠিয়েছি, আমি ড্রুপাল 7 এর জন্য এই সমাধান পেয়েছি তবে ড্রুপাল 8 এর জন্য কোনও সমাধান খুঁজে পাইনি,


2
কোডে আপনি ইভেন্টে কাজ করতে ইভেন্টের গ্রাহককে লিখবেন KernelEvents::REQUESTএবং তারপরে লগইন পৃষ্ঠার জন্য একটি রিডাইরেক্টরেসপনসে প্রতিক্রিয়া সেট করবেন।
mradcliffe

1
আমি অন্য কিছু ভেবেছিলাম। আপনি 403 পৃষ্ঠাটি সেট করতে পারেন /userএবং তারপরে তারা অনামী হয়ে থাকলে এটি তাদের কাছে /user/loginনিয়ে যায় তবে প্রচ্ছন্ন ব্যবহারকারীদের তাদের ব্যবহারকারী প্রোফাইলে নিয়ে যাওয়ার পার্শ্ব প্রতিক্রিয়া সহ তারা তাদের যে পৃষ্ঠায় সন্ধান করছেন তাতে অ্যাক্সেস থেকে বঞ্চিত করা হয়েছে বলে তাদের না জানিয়ে ।
mradcliffe

1
বেনামী ব্যবহারকারীদের জন্য লগইন পুনর্নির্দেশ যুক্ত করতে নিম্নলিখিত মডিউলটি ব্যবহার করুন, এতে পাথগুলি বাদ দেওয়ার জন্য এটির একটি সেটিংস রয়েছে যাতে আমি মনে করি আপনি এতে নিজের বিশ্রামের পথগুলি যুক্ত করতে পারেন। drupal.org/project/anonymous_redirect
ড্যানিয়েল হার্পার

উত্তর:


21

কার্নেল এভেন্টস :: রিকুয়েস্ট সাবস্ক্রাইব করে একটি কাস্টম মডিউলে ইভেন্ট গ্রাহকের সাথে আপনি খুব শীঘ্রই ব্যবহারকারীর স্ট্যাটাসটি পরীক্ষা করতে পারেন।

প্রথমত, আপনি ইভেন্টের গ্রাহককে mymodule.services.ymlআপনার মডিউল ফোল্ডারে নিবন্ধন করুন:

services:
  mymodule.event_subscriber:
    class: Drupal\mymodule\EventSubscriber\RedirectAnonymousSubscriber
    arguments: []
    tags:
      - {name: event_subscriber}

তারপরে ফোল্ডারে RedirectAnonymousSubscriber.php আপনার মডিউলে আপনার কাস্টম ইভেন্টের গ্রাহকের জন্য যুক্ত করুন /src/EventSubscriber/

namespace Drupal\mymodule\EventSubscriber;

use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Event subscriber subscribing to KernelEvents::REQUEST.
 */
class RedirectAnonymousSubscriber implements EventSubscriberInterface {

  public function __construct() {
    $this->account = \Drupal::currentUser();
  }

  public function checkAuthStatus(GetResponseEvent $event) {

    if ($this->account->isAnonymous() && \Drupal::routeMatch()->getRouteName() != 'user.login') {

      // add logic to check other routes you want available to anonymous users,
      // otherwise, redirect to login page.
      $route_name = \Drupal::routeMatch()->getRouteName();
      if (strpos($route_name, 'view') === 0 && strpos($route_name, 'rest_') !== FALSE) {
        return;
      }

      $response = new RedirectResponse('/user/login', 301);
      $event->setResponse($response);
      $event->stopPropagation();
    }
  }

  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('checkAuthStatus');
    return $events;
  }

}

ধন্যবাদ ঘটনা গ্রাহক ধারণা জন্য @mradcliffe করতে
oknate

1
তিনি তৈরি করা উচিত RedirectAnonymousSubscriber.php, আমি আপনার উত্তর আপডেট।
ইউসুফ

@ ব্যবহারকারী কীভাবে / নিবন্ধন বা / ভুলে যাওয়া-পাসওয়ার্ড বা / লগআউট রুটে থাকলে তা জানেন? যদি সেই অবস্থায় সেই রুটগুলির পাশাপাশি পরীক্ষা করা উচিত নয়? এটি অনুসারে, ব্যবহারকারী নিবন্ধকরণের সময় পুনর্নির্দেশ করতে বা নতুন পাসওয়ার্ডের জন্য অনুরোধ করতে পারে।
জুয়াল জে

2
এখানে আরেকটি গুরুত্বপূর্ণ বিশদটি গ্রাহকের "অগ্রাধিকার"। আমি দেখেছি উপরের কিকগুলি পুনর্নির্দেশের আগে কিছু রুট সমাধান হবে But তবে অগ্রাধিকার সেট করা (প্রথমে একটি উচ্চতর সংখ্যায় আগুন) এটি সমাধান করতে সহায়তা করে। উপরের উদাহরণে অ্যারে ('চেকআউথস্ট্যাটাস', 100) ব্যবহার করুন। গ্রাহক এবং অগ্রাধিকারের উপর দস্তাবেজ: symfony.com/doc/current/event_dispatcher.html
বিওয়াগনার

6

ড্রুপাল 8.3.3 এ, এই কোডটি একটি অন্তহীন পুনর্নির্দেশের কারণ হয়ে থাকে। আমি পরিবর্তে যে যোগ করে এটি স্থির করেছি।

..
$response = new RedirectResponse('/user/login', 301);
$response->send();
..

6

প্রথমে আপনার ইভেন্টের গ্রাহকের জন্য একটি পরিষেবা তৈরি করুন module-name.services.yml

কোড -

services:
    [MODULE-NAME]_event_subscriber:
        class: Drupal\MODULE-NAME\EventSubscriber\[Event-Subscriber-class]
        tags:
        - {name: event_subscriber}

modules/module-name/src/EventSubscriberডিরেক্টরিতে নিজের ইভেন্টসস্ক্রাইবার শ্রেণি তৈরি করুন :

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class Event-Subscriber-class implements EventSubscriberInterface {

  private $redirectCode = 301;

  public function checkForRedirection2(GetResponseEvent $event) {
    $account = \Drupal::currentUser(); 
    if (empty($account->id()) {
      $response = new RedirectResponse('/', $this->redirectCode);
      $response->send();
      exit(0);
    }
  }

  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('checkForRedirection2');
    return $events;
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.