Используя ColdFusion Model-Glue, как мне перенаправить пользователя обратно на запрашиваемую страницу после входа в систему? - PullRequest
5 голосов
/ 14 сентября 2011

У меня есть защищенный тип события, который проверяет, вошел ли пользователь в систему, и перенаправляет его на страницу входа, если это не так:

<event-types>
    <event-type name="securedPage">
        <before>
            <broadcasts>
                <message name="CheckLogin"/>
            </broadcasts>
        </before>
        <results>
            <result name="NeedLogin" do="page.login" redirect="true"/>
        </results>
    </event-type>
</event-types>

Страница входа имеет форму, которая ссылается на обработчик события action.login, который будет перенаправлять на домашнюю страницу пользователя, если вход был успешным, и повторно отображать страницу входа, если это не так:

<event-handler name="action.login">
    <broadcasts>
        <message name="Login"/>
    </broadcasts>
    <results>
        <result name="LoggedIn" do="page.user.home" redirect="true"/>
        <result name="NotLoggedIn" do="page.login"/>
    </results>
</event-handler>

Этот код прекрасно работает, но проблема, с которой я сейчас сталкиваюсь, заключается в том, что он всегда перенаправляет на домашнюю страницу пользователя, даже если он запросил другую страницу. Поскольку форма отправляет сообщение в событие action.login , а результат do жестко задан в page.user.home, как я могу изменить свой код, чтобы отслеживать, какую страницу пользователь первоначально запросил, и перенаправить их там?

Ответы [ 2 ]

5 голосов
/ 14 сентября 2011

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

Затем, после успешного входа в систему просто вызовите event.forward () и передайте это значение.

0 голосов
/ 14 сентября 2011

вот общая идея:

  1. в любом методе / коде, выполняемом для «защиты» вашей страницы, если пользователь не вошел в систему, захватите URL, который он пытался достичь, и установите его обратно в состояние просмотра как переменную перед вы их пересылаете. область CGI будет вашим другом здесь, в частности CGI.query_string.

  2. в вашей форме входа / входа, проверьте эту переменную returnEvent в viewstate и установите ее как скрытое значение в вашей форме, если она существует.

  3. где-нибудь в процессе вашей регистрации / регистрации после успеха, проверьте эту переменную 'returnEvent' и, если она существует, перенаправьте пользователя на.

...