2014-09-16 6 views
0

У меня возникли проблемы с выяснением того, имеет ли DNN возможность перенаправлять пользователя, который проверяется на URL-адрес на другом портале на том же сайте.DNN Login - перенаправление портала

Например, скажем, у меня есть PortalA и PortalB, а User1 имеет доступ только к PortalB. Тем не менее, я хочу, чтобы пользователь попытался использовать страницу входа для PortalA, а также некоторую логику, чтобы определить, что пользователь должен быть направлен на PortalB во время или после процесса входа в систему. Итак, если User1 посещает сайт PortalA.com и пытается войти в систему, я хочу, чтобы User1 в конечном итоге был проверен и зарегистрирован в PortalB, и приземлился на домашней странице PortalB.

Просмотрев объект PortalSettings, я попробовал PortalId и PortalName, которые входят в методы UserController.ValidateUser и UserController.UserLogin, но это не помогает при перенаправлении на два портала. Я также рассмотрел измененную переменную HomeTabId, которая используется для получения RedirectURL, и кажется, что изменение этого идентификатора, которое для домашней страницы не работает, поскольку HomeTabId находится за пределами текущего портала Globals.NavigateURL () не дает мне URL-адреса для правильного портала, к которому я хочу перенаправляться.

Я также попытался пропустить переход к событию OnUserAuthenticated, когда валидация является успешной для данного портала, а затем вызывает метод UserLogin, затем пытается перенаправить с помощью Response.Redirect (Globals.NavigateURL()) с правильным URL-адресом , но это, похоже, не работает (я застрял на той же странице).

Кроме того, необходимо иметь возможность определять на странице входа PortalA или PortalB, если пользователь имеет доступ к обоим порталам. Если у них есть доступ к обоим порталам, пользователь сможет выбрать (из списка, выпадающего списка и т. Д.), К какому Порталу они хотят идти. После выбора пользователь может продолжить работу с PortalA или PortalB с любой страницы входа PortalA или PortalB по мере необходимости. Я полагаю, что если прежние требования могут быть решены, то это должно быть легко разрешено.

На всякий случай существуют бизнес-правила, которые определяют, что нам нужны отдельные порталы. Каждый портал имеет специфическую функциональность портала, механизмы бизнес-логики и навигационные меню.

Я действительно посмотрел: и ответ Криса Х, но предоставленного ответа недостаточно для решения моей проблемы (мы используем редакцию DNN Community, и у меня уже есть пользователи, настроенные для к какому порталу у них есть доступ).

EDIT: Эти порталы находятся в одном домене. Таким образом, он будет выглядеть как portal1.mydomain.com и portal2.mydomain.com.

EDIT2: В настоящее время я думаю о том, чтобы сделать перенаправление портала до попытки проверки и регистрации пользователя. Однако мне нужно будет выяснить, как переносить конфиденциальную регистрационную информацию пользователя через два портала - I Не уверен, что попытка временно переносить данные в сеансе будет работать, поскольку они находятся на двух порталах. Я уже заметил, что если я войду в систему с User1 в PortalA, а затем изменим URL-адрес на PortalB, мне придется снова войти в систему, даже если User1 имеет доступ к обоим порталам. Будет ли попытка перенаправления портала до того, как шаг входа будет разумным, или это должно быть сделано после факта?

+0

Существуют ли сайты на совершенно разных доменах (т. Е. P1.com и p2.com)? – DavidG

+0

Они находятся в одном домене. Это будет что-то вроде portal1.mydomain.com и portal2.mydomain.com. – py7133

ответ

0

Вот что я сделал с тех пор, как я разместил вопрос, который, казалось, отвечал требованиям.

Во-первых, я создал таблицу базы данных для хранения маркера входа для перенаправления пользователя. Затем я создал промежуточную страницу с модулем на ней, который выполнил бы проверку с помощью токена и перенаправил пользователя на страницу входа. Эта промежуточная страница используется, потому что я передаю имя пользователя и идентификатор GUID в строке запроса на промежуточную страницу для обработки.Промежуточная страница определяет, куда должен идти пользователь в этот момент.

Итак, пользователь1 принадлежит PortalB и пытается войти в систему PortalA: На PortalA, User1 аутентифицирован, они не являются суперпользователем, поэтому их список порталов получен. User1 указан на PortalB, поэтому для User1 создается истекающий токен, а затем они отправляются на промежуточную страницу PortalB (PortalB-np). На PortalB-np значения строки запроса для идентификатора GUID и имени пользователя получены и сравниваются с токеном, найденным в БД. Если токен не истек, и IP-адрес подходит для создателя токена, я перенаправляю его на страницу входа для PortalB (PortalB-lgn) после сохранения имени пользователя в сеансе. Эта страница никогда не отображается для пользователя. На PortalB-lgn я проверяю эту переменную сеанса на загрузке, и если она найдена, немедленно удалите это значение сеанса и зарегистрируйте этот пользователь, получив пароль пользователя через членство в ASP.NET.

Некоторые примечания: Если вы пытаетесь вручную дойти до промежуточной страницы без значений строки запроса, пользователь перенаправляется на страницу входа для того же портала, к которому они обращаются. Это почти мгновенно. Если вы пытаетесь предоставить токен входа и имя пользователя в строке запроса, токен по-прежнему будет пытаться получить, но, скорее всего, будет терпеть неудачу, поскольку в базе данных нет соответствующего токена для этой комбинации имени пользователя, портала и IP-адреса в течение короткого периода времени для истечения срока действия. Таким образом, они также будут направлены на страницу входа в систему. Это почти мгновенно.

Для сценариев, в которых пользователь может обращаться к нескольким порталам, я проверяю отдельный счет порта, а если он больше одного, предположим, что аутентификация для этого пользователя на первый портал в списке порталов, к которым они могут получить доступ (поскольку это все или ничего в любом случае, они должны иметь доступ к любому порталу в этом списке). Если аутентификация удалась, попросите выпадающий список выбрать, к какому порталу они хотят перейти. Если выбор соответствует текущему порталу, просто выполните обычный вход, иначе выполните перенаправление, как описано выше.

Если есть какие-либо другие мысли по поводу этой реализации, я бы хотел их услышать - но это, похоже, работает хорошо для меня прямо сейчас.

Смежные вопросы