ব্যবহারকারী লগইন পরে পুনঃনির্দেশ


14

লগ ইন করার পরে আমি ব্যবহারকারীদের পুনর্নির্দেশ করতে চাই। hook_user_login()পুনঃনির্দেশটি তৈরি করার জন্য কি এটি ব্যবহার করা সম্ভব ? পুনঃনির্দেশের জন্য আমি কীভাবে প্যারামিটার যুক্ত করব?

উত্তর:


19

আপনাকে লগইন ফর্মটি পরিবর্তন করতে হবে এবং একটি জমা হ্যান্ডলার যুক্ত করতে হবে যা পুনঃনির্দেশের যত্ন নেবে। আপনি $form_state->setRedirectUrl()সরাসরি ফর্ম পরিবর্তনে সরাসরি ব্যবহার করতে পারবেন না , যেহেতু এটি দ্বারা ওভাররাইট করা হবে UserForm::submitForm()

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_user_login_form_alter(&$form, FormStateInterface $form_state) {
  $form['#submit'][] = 'mymodule_user_login_submit';
}

/**
 * Form submission handler for user_login_form().
 *
 * Redirects the user to the dashboard after logging in.
 */
function mymodule_user_login_submit(&$form, FormStateInterface $form_state) {
  $url = Url::fromRoute('mymodule.dashboard');

  // Check if a destination was set, probably on an exception controller.
  // @see \Drupal\user\Form\UserLoginForm::submitForm()
  $request = \Drupal::service('request_stack')->getCurrentRequest();
  if (!$request->request->has('destination')) {
    $form_state->setRedirectUrl($url);
  }
  else {
    $request->query->set('destination', $request->request->get('destination'));
  }
}

4
@ কাইমালালুনো দ্বারা বর্ণিত হিসাবে, কেউ এটিও ব্যবহার করতে পারেন$form_state->setRedirect('mymodule.dashboard);
ফিলিপ মিগুয়েল ফোনসেকা

3
দয়া করে এই উত্তরগুলি অনুসরণকারী ব্যবহারকারীদের মাইমডিউল.ড্যাশবোর্ডের / কী করা উচিত তা ব্যাখ্যা করুন। এটিকে কীভাবে <ফ্রন্ট> এ পরিবর্তন করতে হয়, কেবল উদাহরণ হিসাবে। যেহেতু লগইন করার পরে ব্যবহারকারীর ড্যাশবোর্ডটি ডিফল্ট পুনঃনির্দেশ, তাই এখানে এই উদাহরণটি অকেজো। নতুন ব্যবহারকারী জানেন না কোন অংশগুলি পরিবর্তন করতে হবে এবং কীভাবে তার পুনর্নির্দেশের জন্য।
নীলসন

1
প্রথম পৃষ্ঠায় পুনর্নির্দেশের জন্য, আপনি উপরের উদাহরণটি ব্যবহার করতে পারেন তবে line url অবজেক্টটিকে $ url = url :: fromUri ('অভ্যন্তরীণ: /') তৈরি করে এমন লাইনটি পরিবর্তন করতে পারেন;
Oknate

1
আমি বুঝতে পারছি না elseএখানে কি হচ্ছে ? একটি বিদ্যমান পুনঃনির্দেশ বজায় রাখা?
ব্যবহারকারী 1359

1
আপনাকে ড্রুপাল ore কোর \ ইউরাল ব্যবহার করতে হবে; এটি সঠিকভাবে কাজ করার জন্য
জিগনেশ রাওয়াল

16

ব্যবহারকারীরা একটি ড্রুপাল 8 সাইটে লগইন করার পরে পুনর্নির্দেশ করা ড্রুপাল 7-তে কীভাবে করা হয়েছিল তার থেকে আলাদা নয়, কোডটি ড্রুপাল 8 এর জন্য অভিযোজিত করা দরকার বাদে।

নির্দিষ্টভাবে:

  • hook_user_login()ব্যবহারকারীরা লগইন করার পরে পুনর্নির্দেশের জন্য ব্যবহৃত হয় না, কেবল এই জন্য যে এই হুকের ব্যবহারকারীদের পুনর্নির্দেশ করা অন্য hook_user_login()বাস্তবায়নগুলি আহ্বান করা থেকে বিরত রাখবে ।
  • ব্যবহারকারীদের পুনর্নির্দেশের সঠিক উপায়টি লগইন ফর্মটিতে একটি ফর্ম জমা হ্যান্ডলার যুক্ত করছে যা নিম্নলিখিতটির মতো কোড ব্যবহার করে।

    $form_state->setRedirect('user.page');

    লক্ষ্য করুন যে ব্যবহারকারীর পাতাই সেই ড্রুপাল পাথের রাউটিং নাম যেখানে আপনি ব্যবহারকারীকে পুনঃনির্দেশিত করতে চান।
    আপনার যদি Drupal\Core\Urlক্লাসের উদাহরণ থাকে তবে আপনি নীচের কোডটিও ব্যবহার করতে পারেন।

    $form_state->setRedirectUrl($url);

    মনে রাখবেন যে আপনি যখন ব্যবহারকারীদের লগইন করেছেন একই সাইটের কোনও পৃষ্ঠায় পুনর্নির্দেশ করছেন তখন প্রথম পদ্ধতিটি পছন্দনীয়; দ্বিতীয় পদ্ধতিটি সাধারণত কোনও বাহ্যিক URL ব্যবহার করে ব্যবহারকারীদের পুনর্নির্দেশ করতে ব্যবহৃত হয়।


11

আপনি hook_user_login ব্যবহার করতে পারেন এবং এতে পুনঃনির্দেশ করার চেষ্টা করতে পারেনyourpath

function yourmodule_user_login($account) {
  // We want to redirect user on login.
  $response = new RedirectResponse("yourpath");
  $response->send();
  return;
}

এছাড়াও আপনি বিধি মডিউলটি ব্যবহার করতে পারেন তবে ড্রুপাল 8 এর জন্য এখনও কোনও স্থিতিশীল সংস্করণ নেই।


একটি দুর্দান্ত মার্জিত সমাধান, ড্রুপাল ৮.১ এ আমার জন্য কাজ করেছিল।
আলেক্সি রায়ু

3
আমি পেয়ে ছিল ERR_RESPONSE_HEADERS_MULTIPLE_LOCATIONউপরোক্ত সঙ্গে কিছু বিশেষ পরিস্থিতির মধ্যে ত্রুটি - আমি প্রতিস্থাপন করার পরামর্শ দিই return;সঙ্গে exit;, পুনর্নির্দেশ নিশ্চিত করার - যা সেট হেডার - শেষ জিনিস মৃত্যুদন্ড কার্যকর করা হয়।

2
হুক_উজার_লগিন () সাবমিট হ্যান্ডেলারের আগে কল করা হয় যাতে এটি তাদের কল হতে বাধা দেয়। নীচে যোগেশের উত্তর এটি করার একটি ভাল উপায়।
অপরিচিত

9

পার্টিতে দেরি হলেও https://www.drupal.org/node/2068293#comment-11712455 অনুসারে আপনি লগইন প্রসেসিংয়ের শেষে পুনর্নির্দেশের জন্য hook_user_login () এ গন্তব্য সেট করতে পারেন।

অর্থাত

/**
 * Implements hook_user_login().
 */
function mymodule_user_login(\Drupal\user\UserInterface $account) {
  // Ignore password reset.
  $route_name = \Drupal::routeMatch()->getRouteName();
  if ($route_name !== 'user.reset.login') {
    // Do not interfere if a destination was already set.
    $current_request = \Drupal::service('request_stack')->getCurrentRequest();
    if (!$current_request->query->get('destination')) {
      // Default login destination to the dashboard.
      $current_request->query->set(
        'destination',
        \Drupal\Core\Url::fromRoute('mymodule.dashboard')->toString()
      );
    }
  }
}

অন্যান্য উত্তর অনুসারে ফর্মস্টেট :: সেটরেডাইরেক্ট () ব্যবহার করা সম্ভবত বেশিরভাগ লোকের ব্যবহারের ক্ষেত্রে আবশ্যক এবং সম্ভবত 'ডান' উত্তর, তবে হুক_উজার_লগিন সহ গন্তব্য ক্যোয়ারী প্যারাম ব্যবহার করার অর্থ যে কোনও ফর্ম জমা দেওয়া * যা ব্যবহারকারীর লগগুলিতে পুনঃনির্দেশিত হবে তবে ফর্ম / অনুরোধের অন্য কোনও অংশের হস্তক্ষেপ বা পূর্ব জ্ঞান ছাড়াই

যেমন এটি এখনও একটি কাস্টম লগইন ফর্মের সাথে কাজ করবে এবং গন্তব্য ব্যবহার করা অন্য কোনও হুক থামায় না (এটি \Drupal\Core\EventSubscriber\RedirectResponseSubscriberপ্রতিক্রিয়া প্রক্রিয়া শেষে শেষ করা হয়)।

* যে কোনও ফর্ম জমা দেয় যা হুক_উজার_লগিন (ইউজার_লগিন_ফাইনালাইজ ()) কে আহ্বান করে এবং ম্যানুয়ালি ফর্মস্টেট :: সেটরেস্পোনস () কল করে না


1
যদি লগইন ফর্ম ব্যতীত অন্য কোনও কিছু থেকে প্রমাণীকরণ ঘটে তবে এর কাজ করার সুবিধা রয়েছে। তবে এটি কি অন্যান্য মডিউল থেকে অন্যান্য hook_user_Lgin বাস্তবায়নে বাধা দেয়?
জোনাথন

1
@ জোনাথন না, এটি কেবল গন্তব্য স্থির করে এবং প্রারম্ভিক অনুরোধ করে না -> প্রেরণ () বা কোনও কিছু (যেমন ডি 7 দ্রুপাল_গোটোর মতো), এটি অন্যান্য সমস্ত হুক, ফর্ম কলব্যাক ইত্যাদির উপর অভিনয়ের আগে স্বাভাবিকের মতো চলতে দেয় will । স্ট্যান্ডার্ড ড্রুপাল লগইন পুনর্নির্দেশ এটি ঠিক কীভাবে এটি করে।
সুতঃখ

1
দয়া করে এই উত্তরগুলি অনুসরণকারী ব্যবহারকারীদের মাইমডিউল.ড্যাশবোর্ডের / কী করা উচিত তা ব্যাখ্যা করুন। এটিকে কীভাবে <ফ্রন্ট> এ পরিবর্তন করতে হয়, কেবল উদাহরণ হিসাবে। যেহেতু লগইন করার পরে ব্যবহারকারীর ড্যাশবোর্ডটি ডিফল্ট পুনঃনির্দেশ, তাই এখানে এই উদাহরণটি অকেজো। নতুন ব্যবহারকারী জানেন না কোন অংশগুলি পরিবর্তন করতে হবে এবং কীভাবে তার পুনর্নির্দেশের জন্য।
নীলসন

3
@ নিলসান mymodule.dashboardহ'ল রুটের নাম এবং যেকোন রুটের নাম (যেমন \Drupal\Core\Url::fromRoute('<front>')->toString()বা \Drupal\Core\Url::fromRoute('entity.node.canonical', ['node' => 123])->toString()) দিয়ে প্রতিস্থাপন করা যেতে পারে । আরো তথ্য দেখুন জন্য drupal.org/docs/8/api/routing-system/routing-system-overview এবং api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/...
Sut3kh

2
এটি পাসওয়ার্ড পুনরায় সেট করতে ভঙ্গ করে তাই আমি উত্তরটি নিচে ভোট দিচ্ছি। (অন্য উত্তর হিসাবে প্রস্তাবিত হিসাবে ব্যবহারকারী_লগিন_সর্মটির জন্য একটি ফর্ম জমা হ্যান্ডলার তৈরি করা))
হ্যান্সফন

7

আপনি এটি নিয়মাবলী ব্যবহার করে সহজেই করতে পারেন

প্রতিক্রিয়া এতে: ব্যবহারকারী লগ ইন করার পরে

  • ক্রিয়া যুক্ত করুন: পুনর্নির্দেশ >> এরপরে একটি প্যারামিটার ব্যবহার করুন বা আপনার ইউআরএল টাইপ করুন।

3
এর মূল সতর্কতাটি হ'ল নিয়মগুলি এখনও দ্রুপাল 8-এর প্রাক রিলিজ ALPHA- এ রয়েছে তাই আপনার ওয়েবসাইটে স্থিতিশীলতার প্রয়োজন হলে যত্ন নিন
ফিলিপ গিলবার্ট

1
ব্যবহারকারীরা লগ ইন করার পরে সাইটটি কোনও পৃষ্ঠাতে পুনর্নির্দেশ করলে নিয়মগুলি লগইন সিস্টেমে
অনুপ্রাণিত

6

আপনি ব্যবহারকারীর লগইন ফর্মটিও পরিবর্তন করতে পারেন এবং hook_user_login ব্যবহার করে সরাসরি আপনার কাস্টম URL এ ব্যবহারকারীকে সরাসরি পুনর্নির্দেশের পরিবর্তে own form_state পুনঃনির্দেশ সেট করতে আপনার নিজস্ব কাস্টম জমা হ্যান্ডলার যুক্ত করতে পারেন

<?php
/**
 * Implements hook_form_alter().
 */
function [MODULENAME]_form_alter(&$form, \Drupal\Core\Form\FormStateInterface\FormStateInterface $form_state, $form_id) {
  switch ($form_id) {
    // Alter login form and add own custom submit handler.
    case 'user_login_form':
      $form['#submit'][] = '_[MODULENAME]_user_login_form_submit';
      break;
  }
}

/**
 * Custom submit handler for login form.
 */
function _[MODULENAME]_user_login_form_submit($form, FormStateInterface $form_state) {
  // Set redirect to login form.
  $form_state->setRedirect('YOUR.MENU-ROUTER.NAME');
}

এটিকে $ ফর্ম_স্টেটের পুনঃনির্দেশে যুক্ত করা নিশ্চিত করবে যে অন্য জমা দেওয়া হ্যান্ডলার / লগইন হুকগুলি কল পেয়েছে।

ড্রুপাল Like এর মতো আমরা সরাসরি $ form_state ['redirect'] সেট করতে পারি না, কারণ $ form_state এখন শ্রেণি অবজেক্ট। ফর্মস্টেট চেকআউট :: আরও তথ্যের জন্য setRedirect ()


6

ডি 8-তে, আপনি এই উদ্দেশ্যে ব্যবহারকারীর ডিফল্ট পৃষ্ঠা মডিউলটি ব্যবহার করতে পারেন ।

এই মডিউলটি আপনাকে গন্তব্যটি কাস্টমাইজ করতে দেয় যেখানে একজন ব্যবহারকারী লগ ইন বা লগ আউট করার পরে পুনঃনির্দেশিত হয়। আপনি ভূমিকা বা স্বতন্ত্র ব্যবহারকারীদের দ্বারা কাস্টমাইজ করতে পারেন।


1
কাজ করে তবে এটি পাসওয়ার্ড পুনরায় সেট করার লিঙ্কগুলিতে বিবেচনা করে না, যখন ব্যবহারকারী তাদের পাসওয়ার্ড সেট করতে একবারের লিঙ্ক ব্যবহার করে তখন এটি আপনাকে এই মডিউলটিতে সেট করা পৃষ্ঠায় পুনর্নির্দেশ করে না ব্যবহারকারী অ্যাকাউন্টে।
Sorin

1
এই মডিউলটি এখনও পাসওয়ার্ড পুনরায় সেট করতে বিরতি দেয় তাই আমি উত্তরটি নিচে ভোট দিচ্ছি। দেখুন drupal.org/project/user_default_page/issues/2991916 (অন্য উত্তর কাজ হিসাবে প্রস্তাবিত হিসাবে ব্যবহারকারী_লগিন_ফর্মের জন্য একটি ফর্ম জমা হ্যান্ডলার তৈরি করা।)
হ্যান্সফন

4

এটি করার জন্য একটি সাধারণ মডিউল রয়েছে যা ড্রুপাল ৮ এর সাথে সামঞ্জস্যপূর্ণ It এটি ইউজার ডিফল্ট পৃষ্ঠা বলে

মডিউল আপনাকে গন্তব্যটি কাস্টমাইজ করতে দেয় যেখানে একজন ব্যবহারকারী লগ ইন বা লগ আউট করার পরে পুনরায় নির্দেশিত হয়। আপনি ভূমিকা বা স্বতন্ত্র ব্যবহারকারীদের দ্বারা কাস্টমাইজ করতে পারেন। এবং এই ক্রিয়াগুলির জন্য কনফিগারযোগ্য ড্রুপাল বার্তাগুলি কাস্টমাইজ করুন।


3

hook_user_login() পুনঃনির্দেশের জন্য কাজ করে না, ব্যবহারকারী লগ ইন করার সময় আপনি কিছু করতে চাইলে এটি ব্যবহার করা হয় F

পরিবর্তে আপনাকে hook_form_alterসমস্ত লগইন ফর্মগুলিতে ব্যবহার করতে হবে এবং একটি কাস্টম জমা হ্যান্ডলার যুক্ত করতে হবে যা ফর্মের স্টেট অবজেক্টে পুনঃনির্দেশ সেট করে।


2

আমি আমার নিজস্ব নিয়ামকটিতে লগইন ফর্মটি প্রদর্শন করছি। এইভাবে ফর্মটি পরিচালনা করা সম্ভব (এবং লগইন করার পরে ব্যবহারকারীকে পুনর্নির্দেশ করা) অ-ওও হুক ব্যতীত:

$fb = $this->formBuilder();
$rc['top'] = ['#markup' => '<p>Willkommen im Kundenbereich von proreos. 
    Bitte melden Sie sich hier mit Ihrem
    Benutzernamen oder Ihrer Email Addresse an.</p>'];
$form = $fb->getForm("Drupal\user\Form\UserLoginForm");

$ug = $this->getUrlGenerator();
$redir = $ug->generateFromRoute('proreos.home', [], 
         ['query' => $this->getDestinationArray(), 'external' => FALSE]);
$form['#action'] = $redir;

$rc['login'] = $form;

return $rc;

আপনার প্রয়োজনীয় গন্তব্যের জন্য 'proreos.home' রুটটি পরিবর্তন করুন।

শুভেচ্ছা সহ

রাইনার


2

destinationইউআরএল লগইন করার জন্য কেবল পরামিতি যুক্ত করুন ।
উদাহরণ:http://example.com/user/login?destination=/my-page

যদি আপনি 403 (অ্যাক্সেস অস্বীকৃত) পৃষ্ঠাগুলিতে নিম্নলিখিত মডিউলটি ব্যবহার করেন:
https://www.drupal.org/project/redirect_403_to_login_page


2

আমি নীচের স্নিপেটটি বেশ ব্যবহার করি তাই আমি ভেবেছিলাম এটি ভাগ করে নিই। ব্যবহারকারীর কোন ভূমিকা রয়েছে তার উপর নির্ভর করে আপনি বিভিন্ন পুনর্নির্দেশগুলি যুক্ত করতে পারেন।

use Symfony\Component\HttpFoundation\RedirectResponse;

/**
 * Redirect on login.
 */
function MYMODULE_user_login($account) {
  $roles = $account->getRoles();
  if(in_array('webmaster', $roles)) {
    $response = new RedirectResponse('/admin/content');
    $response->send();
  }
}


1

পুনঃনির্দেশের জন্য আপনি লগইনটোবোগান মডিউল ব্যবহার করতে পারেন । এটির অন্যান্য কনফিগারেশন রয়েছে যা আপনি ব্যবহারকারীর নাম ব্যবহার করে লগইনের মতো অন্যান্য কার্যাদি চাইলে দরকারী হতে পারে।


2
ডি 7 এর পক্ষে ভাল উত্তর, তবে এই প্রশ্নটি ডি 8 ট্যাগ করেছে, এবং লগইনটোবোগানের কোনও ড্রুপাল 8 সংস্করণ নেই।
কেলি কারি

1

https://www.drupal.org/project/redirect

  1. উপরের মডিউলটি ইনস্টল করুন
  2. Url এ গন্তব্য প্যারামিটার হিসাবে কাস্টম ইউআরএল পাথ যুক্ত করুন
  3. সুতরাং, থেকে পুনর্নির্দেশের জন্য উপরের মডিউলটি কনফিগার করুন

    / ব্যবহারকারী / লগইন / ইউজার / লগইন? গন্তব্য = 'CUSTOM_NODE_PATH'

    • প্রমাণিত ব্যবহারকারীদের সংশ্লিষ্ট পৃষ্ঠায় অ্যাক্সেসের অনুমতি দেওয়ার জন্য r4032 লগিন মডিউলটি ব্যবহার করতে চেয়েছিলেন , যখন তারা ইউআরএলটি অনুলিপি / পেস্ট করে বা উদাহরণ / শব্দ / এক্সেল থেকে হাইপারলিঙ্ক ব্যবহার করে।
    • অন্যান্য 'লগইন পুনর্নির্দেশ' মডিউলগুলি এই কার্যকারিতাটি ওভাররাইড করবে এবং গন্তব্য প্যারামিটারগুলি ইউআরএল অন্তর্ভুক্ত থাকা সত্ত্বেও ব্যবহারকারীদের একটি কনফিগার করা একক পৃষ্ঠায় অবতরণ করতে দেয় would

1

এই সমস্যাটির জন্য বিশেষভাবে অন্য একটি বিকল্প হ'ল একটি সাধারণ দ্রুপাল 8 অবদানযুক্ত মডিউল: লগইন করার পরে পুনর্নির্দেশ । মডিউলটি এখানে পাওয়া যাবে:

https://www.drupal.org/project/redirect_after_login

বর্ণনাটি যেমন দেখায়, এটি একটি সাধারণ, দৃষ্টি নিবদ্ধ করা মডিউল যা ড্রুপাল সুরক্ষা উপদেষ্টা নীতি দ্বারা আচ্ছাদিত।


1

/**
 * hook_user_login Redirect to English language whenever admin login
 **/
function modulename_user_login($account) {
  // We want to redirect user on login.
  $response = new Symfony\Component\HttpFoundation\RedirectResponse("/en/admin/config");
  $response->send();
  return;
}

0

আমি হুক_উসার_লগিনের উপর নির্ভরশীল অন্যান্য জিনিসগুলি ঘুরে দেখার উপায় নিয়ে কাজ করছি কারণ 8 এর নতুন সংস্করণে অন্যান্য অনেকগুলি বিকল্প ভেঙে যাচ্ছে কিছু অন্যান্য পুনঃ-প্রত্যক্ষ মডিউলগুলি অনেক বেশি লেগ-কাজ করে যা এখন আর প্রাসঙ্গিক নয় এবং / বা ঠিক ডান হগিংয়ের সংস্থানগুলি। আমি লগইন প্রক্রিয়াগুলি পরিচালনা করার জন্য কাস্টম মডিউলে এই সাধারণ যুক্তিকে একসাথে রেখেছি:

function hook_user_login( UserInterface $account ) {
  // Doing checks to see if the login is from an HTML origin or not.
  // Could be from RESTful request to logins
  $request = \Drupal::request();
  if ($request->getRequestFormat() !== 'html') {
    // default
    return;
  }

  // Get the destination to see where the login request is going.
  // This is useful to check for interactions from user creations.
  $destination = $request->query->get('destination');

  // Check the destination. If the destination will result in a re-direct 
  // to your homepage (here statically defined, but could be programmatic)
  // then you can force re-direct to a different page. This is the URL defined
  // in config > system > basic site settings.
  if ($destination && $destination === '/whatever-homepage-uri-is') {
    // Regular login, send to alternate welcome page
    $response = new RedirectResponse('/welcome');
    $response->send();
    exit;
  }

  // default
  return;
}

আমি এটি সফলভাবে ড্রুপাল ৮.৮.৩ এর সাথে ব্যবহার করছি এবং এটি আমার নির্মিত অন্য একটি মডিউল থেকে আমার আরএসটি লগইন অনুরোধগুলি ভঙ্গ করে না, নতুন অ্যাকাউন্ট তৈরির জন্য সঠিকভাবে পুনঃনির্দেশ দেয় এবং তারপরে একটি নিয়মিত সাইট লগইনে অন্য পৃষ্ঠায় পুনঃনির্দেশ দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.