Рейтинг:0

Как перенаправить пользователя после входа в систему на маршрут, для которого требуется UID?

флаг ng

Я знаю, это кажется основным вопросом:

Как в Drupal 9 перенаправить пользователя после входа на путь/маршрут, который требует UID в пути?

Я исследовал и пробовал разные реализации, но ни одна из них не поддерживает токены (правила, перенаправление после входа в систему и т. д.).

Например, после того, как пользователь войдет в систему, он должен попасть на «/homebox-page/dashboard/UID» <- числовое значение текущего идентификатора пользователя.

Я надеялся, что простой модуль справится с этим, но, похоже, мне может понадобиться сделать это с помощью пользовательского кода?

Kevin avatar
флаг in
Это похоже на подписчика событий, который проверяет, вошел ли пользователь в систему, если не перенаправляет их, и включает параметр назначения, чтобы они возвращались туда после входа в систему.
berliner avatar
флаг bd
Поскольку вы не указали это явно: [Назначение входа] (https://www.drupal.org/project/login_destination), похоже, поддерживает токены.
quantumized avatar
флаг ng
Спасибо. Я думаю, что я выберу пользовательский код, а не пункт назначения входа, который включает в себя слишком много дополнительных функций, с которыми могут справиться несколько строк кода.
Рейтинг:1
флаг cn

Это должно быть возможно с помощью нескольких строк пользовательского кода. Форма входа пользователя перенаправляет уже на entity.user.canonical, для которого требуется UID:

  публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {

    если (пусто($uid = $form_state->get('uid'))) {
      возвращаться;
    }
    $account = $this->userStorage->load($uid);

    // Назначение было установлено, вероятно, на контроллере исключений.
    if (!$this->getRequest()->request->has('destination')) {
      $form_state->setRedirect(
        'entity.user.canonical',
        ['пользователь' => $account->id()]
      );
    }
    еще {
      $this->getRequest()->query->set('destination', $this->getRequest()->request->get('destination'));
    }

    user_login_finalize ($ учетная запись);
  }
  

Вы можете добавить свой собственный обработчик отправки, делающий то же самое, перезаписывая перенаправление. Там вы можете использовать \Drupal::currentUser(), потому что user_login_finalize() в основном обработчике отправки устанавливает эту службу с пользователем, только что вошедшим в систему.

quantumized avatar
флаг ng
Спасибо! Да, на самом деле я выбрал маршрут обработчика отправки из hook_form_alter(), и он работает отлично.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.