Подтвердить что ты не робот

ASP.NET LoginStatus внутри LoginView не запускает событие LoggingOut

У меня есть LoginView в моем приложении APS.NET с AnonymousTemplate и LoggedInTemplate. Я установил элемент управления LoginStatus внутри LoggedInTemplate, но он не работает должным образом.

Здесь код

<asp:LoginView ID="LoginView1" runat="server">
    <AnonymousTemplate>
        <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"
            DisplayRememberMe="False" PasswordRecoveryUrl="/" 
            DestinationPageUrl="/">
        </asp:Login>
    </AnonymousTemplate>
    <LoggedInTemplate>
        You are logged in as 
        <asp:LoginName ID="LoginName1" runat="Server"></asp:LoginName>.
        <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="Redirect" 
            LogoutPageUrl="/" onloggingout="LoginStatus1_LoggingOut" />
    </LoggedInTemplate>
</asp:LoginView>

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

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

Я заметил, что если я перемещу элемент управления LoginStatus за пределами LoginView, то процесс выхода будет работать, как ожидалось. Я также заметил, что когда LoginStatus находится внутри LoginView, он не вызывает событие loggingout.

Есть ли у кого-нибудь идеи, что может быть проблемой?

4b9b3361

Ответ 1

Здесь я сталкиваюсь с теми же проблемами. Элемент управления loginstatus за пределами элемента управления loginview работает по желанию. Кажется глупым, что он не будет работать в элементе управления loginview.

EDIT ** Хорошо, поэтому я забыл, что я строю эту страницу в Sitecore. Очевидно, Sitecore каким-то образом вмешивается с элементом управления loginview и должен быть добавлен в следующий раздел в файле web.config:

  <sitecore>
    <rendering>
      <typesThatShouldNotBeExpanded>
        <type>System.Web.UI.WebControls.LoginView</type>
      </typesThatShouldNotBeExpanded>
    </rendering>
  </sitecore>

Спасибо другому парню...

-Victor F.

Ответ 2

FormsAuthentication.SignOut()
FormsAuthentication.RedirectToLoginPage()

Также вы правильно использовали аутентификацию формы, я имею в виду, что вы поместили веб-конфигурацию во внутренние каталоги?

<system.web>
<authorization>
  <allow users="?"/>
</authorization>

Ответ 3

У меня такая же проблема. Но мое решение состояло в том, чтобы поменять элемент управления loginstatus для элемента управления гиперссылкой и переместить гиперссылку на мою домашнюю страницу с параметром querystring, прикрепленным как "logout = true", а затем на моей домашней странице проверьте Request.QueryString для значения, и если это не является нулевым, сделайте это.

FormsAuthentication.SignOut();

Ответ 4

Вы пытались изменить свой LogoutAction на LogoutAction="RedirectToLoginPage"? Обычно я разрешаю .NET обрабатывать очистку файла cookie, что делает событие OnLoggingOut не необходимым.