LoginView работает в папке Account, а не в корневой папке сайта. - PullRequest
0 голосов
/ 29 декабря 2011

Я искал в Интернете ответ на мою проблему и прочитал сайт msdn по элементам управления ASP.Net, безопасности и аутентификации, но либо не смог найти ответ, либо пропустил его со всей информацией, которую я прочитал.

Я создаю веб-сайт в ASP.Net v2.0 для размещения на удаленном сервере. Я использую MySQL в качестве серверной части, которая также содержит пользовательские таблицы. Я использовал ту же структуру пользовательских таблиц, что и в таблице членства по умолчанию. Папки в приложении имеют назначенные им роли по умолчанию.

При тестировании на локальном компьютере возникает следующая проблема.

Когда я вхожу в систему с помощью страницы ~/Account/Login.aspx, я перенаправляю пользователя на ~/Account/AccountDetails.aspx, который содержит LoginView. После входа в систему имя пользователя отображается на этой странице внутри LoginView, и они проходят проверку подлинности.

Когда я затем перехожу к ~/Default.aspx и использую тот же код для LoginView, имя пользователя не отображается и они больше не проходят проверку подлинности.

Я не хочу создавать несколько страниц для отображения одних и тех же данных, поскольку как вошедшие в систему, так и анонимные пользователи должны видеть одну и ту же информацию на странице ~/Default.aspx. Я просто надеялся показать, что пользователь вошел на страницу Default.aspx или на любую страницу в папке ~/.

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

Я просмотрел stackoverflow и нашел много LoginView вопросов, но, похоже, не могу найти тот, который отвечает на мой вопрос.

Я надеялся, что кто-то сможет указать мне правильное направление.

Вот код, используемый на страницах Default.aspx и AccountDetails.aspx. Это код по умолчанию LoginView из шаблона ASP.Net веб-приложения.

<div class="loginDisplay">
  User Authenticated? <%= Page.User.Identity.IsAuthenticated %>
  <asp:LoginView ID="HeadLoginView" runat="server">
    <AnonymousTemplate>
      [ <a href="~/Account/Login.aspx" ID="HeadLoginStatus" runat="server">Log In</a> ]
    </AnonymousTemplate>
    <LoggedInTemplate>
      Welcome <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
      [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Log Out" LogoutPageUrl="~/"/> ]
    </LoggedInTemplate>
  </asp:LoginView>
</div>  

Файл ~/Account/web.config содержит следующее:

<?xml version="1.0"?>  
<configuration>  

  <location path="Register.aspx">  
    <system.web>  
      <authorization>  
        <allow users="*"/>  
      </authorization>  
    </system.web>  
  </location>  


  <system.web>  
    <authorization>  
      <deny users="?" />  
    </authorization>  
  </system.web>  
</configuration>

Файл ~/web.config содержит следующую информацию. Я отредактировал некоторые значения для имени пользователя и паролей. Я также удалил закомментированные строки.

<?xml version="1.0"?>  
<configuration>  
  <connectionStrings>  
    <add name="MySqlMembershipConnection" connectionString="Data Source=mydatasource;user id=dotnet;password=dotnet;" providerName="MySql.Data.MySqlClient" />    
    <add name="mycs" connectionString="Dsn=mydsn" providerName="System.Data.Odbc" />    
    <remove name="LocalMySqlServer" />    
    <add name="LocalMySqlServer" connectionString="database=mydsn;server=localhost;User Id=dotnet;password=dotnet" providerName="MySql.Data.MySqlClient" />    
  </connectionStrings>    
  <system.web>    
    <sessionState mode="Custom" cookieless="false" regenerateExpiredSessionId="true" customProvider="MySqlSessionStateProvider">    
      <providers>    
        <add name="MySqlSessionStateProvider" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </sessionState>    
    <authentication mode="Forms">    
      <forms loginUrl="~/Account/Login.aspx" timeout="30" name=".ASPXFORM$" path="~/" requireSSL="false" slidingExpiration="true" defaultUrl="~/Default.aspx" enableCrossAppRedirects="false" />    
    </authentication>    
    <membership defaultProvider="MySQLMembershipProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLMembershipProvider" />    
        <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="mydescription" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="True" requiresUniqueEmail="False" passwordFormat="Clear" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />    
      </providers>    
    </membership>    
    <profile defaultProvider="MySQLProfileProvider">    
      <providers>    
        <clear />    
        <remove name="MySQLProfileProvider" />    
        <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="False" autogenerateschema="True" />    
      </providers>    
    </profile>    
    <roleManager enabled="true" defaultProvider="MySQLRoleProvider">    
      <providers>    
        <clear />    
        <add applicationName="/" name="AspNetWindowsTokenRoleProvider"
      type="System.Web.Security.WindowsTokenRoleProvider" />    
        <add applicationName="/" description="" connectionStringName="LocalMySqlServer"
      writeExceptionsToEventLog="False" autogenerateschema="True"
      name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.4.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />    
      </providers>    
    </roleManager>    
    <customErrors mode="Off" />    
    <compilation debug="true" />    
  </system.web>    

  <system.net>    
    <mailSettings>    
      <smtp from="user@domain.com">    
        <network host="mail.domain.com" password="mypassword" userName="myusername" />    
      </smtp>    
    </mailSettings>    
  </system.net>    

  <system.webServer>    
    <modules runAllManagedModulesForAllRequests="true" />    
  </system.webServer>    

</configuration>    

1 Ответ

0 голосов
/ 04 января 2012

Итак, после долгих испытаний я выяснил, в чем проблема.Во-первых, у меня было три строки подключения, одна для данных и две для аутентификации форм.Я объединил две строки подключения для проверки подлинности форм в одну строку подключения.Это позволяет мне иметь одну строку подключения для данных и одну для аутентификации.

Далее я хотел выяснить, где произошла моя проблема, поэтому я создал новый пустой ASP.NET веб-сайт в VS 2010, а затем шагшаг за шагом добавлена ​​поддержка MySQL.Это было сделано путем добавления сначала данных MySQL Data и Web, затем строк подключения и, наконец, аутентификации форм.

Я заметил в элементе forms в элементе аутентификации system.web, что он включает толькоАтрибуты loginURL и timeout, поэтому я тестировал приложение, добавляя дополнительные атрибуты для элемента формы, пока не обнаружил атрибут, вызывающий проблему.

В моем элементе форм атрибут пути был установлен на «~ /».Когда я изменил это на '/', приложение начало работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...