2011-12-29 58 views
0

我一直在搜索互聯網上的問題的答案,並通過msdn網站上的ASP.Net控件,安全和身份驗證,但無論找不到答案或用我讀過的所有信息錯過了它。LoginView在帳戶文件夾中工作,而不是在網站的根文件夾中

我在ASP.Net v2.0中構建一個網站,以在遠程服務器上託管。我使用MySQL作爲後端,它也包含用戶表。我使用了與默認成員資格表中使用的相同的用戶表結構。應用程序中的文件夾都具有分配給它們的默認角色權限。

在我的本地計算機上的測試中發生了以下問題。

當我登錄使用~/Account/Login.aspx頁面的用戶時,我將用戶重定向到~/Account/AccountDetails.aspx,其中包含LoginView。登錄後,用戶名在LoginView內的此頁面上可見,並且它們已通過身份驗證。

當我然後去~/Default.aspx,並使用相同的代碼LoginView,用戶名不顯示,他們不再驗證。

我不想創建多個頁面來顯示相同​​的數據,因爲登錄和匿名用戶都需要在~/Default.aspx頁面中看到相同的信息。我只是希望顯示用戶已登錄Default.aspx頁面或~/文件夾中的任何頁面。

我知道這將是一個簡單的設置或需要改變,如角色或會員等,但我無法弄清楚。

我已經通過stackoverflow看,發現很多LoginView的問題,但似乎無法找到一個回答我的問題。

我希望有人能夠指引我走向正確的方向。

以下是在Default.aspxAccountDetails.aspx頁面上使用的代碼。這是來自模板ASP.Net網站應用程序的默認LoginView代碼。

<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="[email protected]">  
     <network host="mail.domain.com" password="mypassword" userName="myusername" />  
     </smtp>  
    </mailSettings>  
    </system.net>  

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

</configuration>  
+0

你不能分享web.config中配置的內容嗎?什麼說授權標籤? <授權> 2011-12-29 11:46:47

+0

嗨,它是模板ASP.NET網站附帶的標準web.config設置。 – 2011-12-29 11:56:46

+0

你能給我一個根文件夾中web.config的快照嗎?它是否包含授權標籤? – 2011-12-29 12:06:49

回答

0

因此,經過多次測試,我找出問題所在。首先,我有三個連接字符串,一個用於數據,另外兩個用於表單身份驗證。我將兩個表單身份驗證連接字符串合併爲一個連接字符串。這允許我有一個數據連接字符串和一個用於身份驗證的連接字符串。

接下來,我想知道我的問題發生在哪裏,於是我在VS 2010中創建了一個新的空白ASP.NET網站,然後一步一步添加,支持MySQL。這是通過首先添加MySQL數據和Web引用,然後是連接字符串,然後添加表單身份驗證來完成的。

我注意到在system.web身份驗證元素的forms元素中,它只包含loginURL和timeout屬性,所以我通過在forms元素的附加屬性中添加來測試應用程序,直到找到導致問題的屬性。

在我的表單元素中,路徑屬性被設置爲'〜/'。當我將其更改爲'/'時,應用程序開始正常工作。

相關問題