0

私は自分の問題に対する答えを求めてインターネットを検索しており、ASP.Net コントロール、セキュリティ、および認証に関する msdn サイトを読みましたが、答えが見つからないか、読んだすべての情報を見逃していました。

リモート サーバーでホストされる ASP.Net v2.0 で Web サイトを構築しています。ユーザーテーブルも含むバックエンドとしてMySQLを使用しています。デフォルトのメンバーシップ テーブルで使用されているものと同じユーザー テーブル構造を使用しました。アプリケーション内のすべてのフォルダには、デフォルトのロール権限が割り当てられています。

ローカル コンピューターでのテストで、次の問題が発生しています。

ページを使用してユーザーにログインすると、ユーザーを~/Account/Login.aspxにリダイレクトし~/Account/AccountDetails.aspxますLoginView。ログインすると、ユーザ名が 内のこのページに表示され、LoginView認証されます。

次に に移動し~/Default.aspx、 に同じコードを使用するとLoginView、ユーザー名が表示されず、認証されなくなりました。

ログインしているユーザーと匿名ユーザーの両方がページで同じ情報を表示する必要があるため、同じデータを表示するために複数のページを作成したくありません~/Default.aspxDefault.aspxユーザーがページまたは~/フォルダー内の任意のページにログインしていることを示すことを望んでいました。

役割やメンバーシップなど、簡単な設定や変更が必要になることはわかっていますが、それがわかりません。

私はstackoverflowを見て、たくさんのLoginView質問を見つけましたが、私の質問に答えるものを見つけることができないようです.

誰かが私を正しい方向に向けることができることを望んでいました.

Default.aspxAccountDetails.aspxページの両方で使用されるコードを次に示します。LoginViewこれは、テンプレートASP.NetWeb サイト アプリケーションのデフォルトコードです。

<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>    
4

1 に答える 1

0

それで、多くのテストの後、私は問題がどこにあるかを理解しました。まず、3つの接続文字列がありました。1つはデータ用で、2つはフォーム認証用です。2つの形式の認証接続文字列を1つの接続文字列に結合しました。これにより、データ用に1つ、認証用に1つの接続文字列を使用できます。

次に、問題が発生している場所を確認したかったのでASP.NET、VS 2010で新しい空白のWebサイトを作成し、ステップバイステップでサポートを追加しましたMySQL。これは、最初にMySQLデータとWeb参照を追加し、次に接続文字列を追加し、最後にフォーム認証を追加することによって行われました。

system.web authentication要素のforms要素で、loginURL属性とtimeout属性のみが含まれていることに気付いたので、問題の原因となる属性が見つかるまで、forms要素に追加の属性を追加してアプリケーションをテストしました。

私のフォーム要素では、パス属性が「〜/」に設定されていました。これを「/」に変更すると、アプリケーションが正しく動作し始めました。

于 2012-01-04T14:20:05.557 に答える