2016-08-28 14 views
0

AccessMembershipProvide를 사용하여 .NET 2에서 실행되는 이전 사이트가 있으며이를 MySqlMemebrshipProvider로 변경하고 있습니다. 멤버쉽 측은 올바르게 작동하지만 역할 부분은 제공하지 않는 것 같습니다. 역할 방법?RoleProvider .NET 2 - MS Access에서 MySQL로 변환

Web.Config의 OdbcRoleProvide로 다시 전환하면 여전히 MySqlMembershipProvider를 사용하면서 작동합니다. Response.Write(Roles.IsUserInRole(User.Identity.Name, "Admin") & " -role exist- " & Roles.RoleExists("Admin"))

이 로그인 한 사용자도 함께 false를 반환

내가 가진 역할을 부르 겠어요.?

참고 : 호스팅 된 사이트에서 실행 중이며 Visual Studio에 액세스 할 수 없습니다 (이것이 디버깅을 매우 어렵게 만든다는 것을 알고 있습니다)!

의 Web.config :

<connectionStrings> 
<clear /> 
<add name="OdbcServices" connectionString="Driver={Microsoft Access Driver (*.mdb)};Dbq=e:\App_Data\subsite.mdb;" /> 
<add name="ConnString" connectionString="Database=Training;Data Source=localhost;User Id=myuser;Password=mypassword" /> 
</connectionStrings> 
<system.web> 

<compilation debug="true" strict="false" explicit="true"> 
    <codeSubDirectories> 
     <add directoryName="VBCode" /> 
     <add directoryName="CSCode" /> 
    </codeSubDirectories> 
</compilation> 
<!-- 
<membership defaultProvider="AccessMembershipProvider" 
      userIsOnlineTimeWindow="20"> 
    <providers> 
    <clear /> 
    <add name="AccessMembershipProvider" 
type="AccessMembershipProvider" 
enablePasswordReset="true" 
enablePasswordRetrieval="true" 
requiresQuestionAndAnswer="true" 
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\App_Data\subsite.mdb;Persist Security Info=False" 
/> 
    </providers> 

</membership> 

<roleManager defaultProvider="OdbcRoleProvider" 
    enabled="true" 
    cacheRolesInCookie="true" 
    cookieName=".ASPROLES" 
    cookieTimeout="30" 
    cookiePath="/" 
    cookieRequireSSL="false" 
    cookieSlidingExpiration="true" 
    cookieProtection="All" > 

    <providers> 
    <clear /> 
    <add name="OdbcRoleProvider" 
     type="Samples.AspNet.Roles.OdbcRoleProvider" 
     connectionStringName="OdbcServices" 
     applicationName="SampleApplication" 
     writeExceptionsToEventLog="false" /> 

    </providers> 

</roleManager> 
--> 

<!-- http://www.codeproject.com/Articles/12301/Membership-and-Role-providers-for-MySQL --> 

<roleManager defaultProvider="MySqlRoleProvider" 
    enabled="true" 
    cacheRolesInCookie="true" 
    cookieName=".ASPROLES" 
    cookieTimeout="30" 
    cookiePath="/" 
    cookieRequireSSL="false" 
    cookieSlidingExpiration="true" 
    cookieProtection="All" > 
<providers> 
    <clear /> 
    <add 
     name="MySqlRoleProvider" 
     type="Andri.Web.MySqlRoleProvider" 
     connectionStringName="ConnString" 
     applicationName="SampleApplication" 
     writeExceptionsToEventLog="false" 
    /> 
</providers> 
</roleManager> 

<membership defaultProvider="MySqlMembershipProvider" 
      userIsOnlineTimeWindow="15"> 
    <providers> 
     <clear /> 
     <add 
      name="MySqlMembershipProvider" 
      type="Andri.Web.MySqlMembershipProvider" 
      connectionStringName="ConnString" 
      applicationName="ApplicationName" 
      enablePasswordRetrieval="true" 
      enablePasswordReset="true" 
      requiresQuestionAndAnswer="true" 
      requiresUniqueEmail="false" 
      passwordFormat="Clear" 
      writeExceptionsToEventLog="false" 
     /> 
    </providers> 
</membership> 


<authentication mode="Forms"> 
    <forms loginUrl="~/Login.aspx" /> 
</authentication> 

... 

답변

0

같은 반응을 유발하지 않았다 다시 RolesProvider.vb로 되 돌리는 이유는, 그러나 MembershipProvider.cs에서 잘못된 SQL 문이 있었다 확실하지. 이로 인해 문제가 해결되고 RolesProvider가 원하는대로 응답합니다.