Мультисайтинг и переадресация, после авторизации

Аватар пользователя genco genco 4 августа в 3:35

Здравствуйте. Есть два сайта на друпал. Сайты созданы с помощью мультисайтинга. Есть страница на одном сайте site.com/about. На этой странице есть ссылка "вход", которая ведёт на id.site.com/login. Подскажите, пожалуйста, как сделать так, чтобы после авторизации на id.site.com/login, пользователя переадресововало обратно на странице site.com/about?

Лучший ответ

Аватар пользователя charOFF charOFF 4 августа в 14:29

Без доп. модулей никак. Есть вот такой https://www.drupal.org/project/rules_url_argument . Сам не пользовался, но по описанию должен подойти.
Другой вариант - через кастомный модуль в хуке hook_user_login делать редирект куда надо.
Или, как предлагали выше, альтерить форму, добавить свой сабмит, и в нем редиректить, например через установку $form_state['redirect']
Дополню. Сейчас посмотрел, альтерить форму - это уже лишнее усложнение, т.к. hook_user_login вызывается внутри сабмита формы логина и первым аргументом по сути идет $form_state.

Комментарии

Аватар пользователя OldWarrior OldWarrior 4 августа в 11:38

А destination умеет в кроссдоменные редиректы?

Мне кажется, всё равно придётся альтерить форму логина.

Аватар пользователя charOFF charOFF 4 августа в 12:42

Может через Rules? Событие "Пользователь авторизовался". В ссылку добавляем какой-нибудь параметр, например //id.site.com/login?from=site.com. Условие в правилах - url текущей страницы равно login?from=site.com . Действие - переадрессация.

Аватар пользователя charOFF charOFF 4 августа в 14:29

Без доп. модулей никак. Есть вот такой https://www.drupal.org/project/rules_url_argument . Сам не пользовался, но по описанию должен подойти.
Другой вариант - через кастомный модуль в хуке hook_user_login делать редирект куда надо.
Или, как предлагали выше, альтерить форму, добавить свой сабмит, и в нем редиректить, например через установку $form_state['redirect']
Дополню. Сейчас посмотрел, альтерить форму - это уже лишнее усложнение, т.к. hook_user_login вызывается внутри сабмита формы логина и первым аргументом по сути идет $form_state.

Аватар пользователя OldWarrior OldWarrior 4 августа в 19:04

genco wrote: А как сделать это, если адрес site.com/about динамичный?

Что значит - динамический? Это обычный друпаловский синоним? Я что-то не пойму проблему. Поясните.

Аватар пользователя genco genco 4 августа в 19:27

Дело в том, что мне с сайта id.site.com перенаправить именно на ту страницу откуда пользователь и перешёл на страницу авторизации. Это может быть любая страница на site.com. Смог объяснить?) да, это обычный друпаловский синоним

Аватар пользователя OldWarrior OldWarrior 5 августа в 7:16

Понятно.

Тогда, если уж всё равно альтерить форму (либо писать хук), то возможно лучше читать адрес-источник из $_SERVER['HTTP_REFERER'], чем передавать через ссылки.

Аватар пользователя charOFF charOFF 5 августа в 10:37

При передаче источника через урл есть одно небольшое преимущество, при ошибочном вводе пароля он не потеряется, а HTTP_REFERER потеряется.
И еще одно новшество от браузеров нужно учесть, если опираться на реферер, нужно позаботиться об установке заголовка ответа Referrer-Policy, потому как Chrome начиная с версии 85 изменяет политику передачи реферера по-умолчанию и при cross-origin переходах будет передает только домен, но не полный урл источника https://developers.google.com/web/updates/2020/07/referrer-policy-new-ch... .