2010-10-18 6 views
0

J'ai un site web ASP.NET qui utilise le connecteur .NET MySql et MySql comme back-end. J'utilise l'authentification basée sur les rôles pour protéger certaines zones de mon site. Le problème est que les informations de rôle de l'utilisateur ne sont pas conservées après le transfert de mon site sur le serveur (fonctionne correctement sur ma machine de développement locale). Qu'est-ce qui se passe est que je peux me connecter en utilisant le logincontrol qui me dirige vers la zone d'administration après l'authentification de l'utilisateur. À ce stade, User.IsInRole ("admin") est true. Mais quand je clique sur un lien pour aller à une autre page dans la section admin User.IsInRole ("admin") est faux.Les informations de rôle ASP.NET ne sont pas conservées

Web.config

<membership defaultProvider="MySqlMembershipProvider" userIsOnlineTimeWindow="15"> 
    <providers> 
     <remove name="MySQLMembershipProvider"/> 
     <add name="MySQLMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="true" passwordFormat="Clear" maxInvalidPasswordAttempts="3" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="3" passwordStrengthRegularExpression="" autogenerateschema="true"/> 
    </providers> 
</membership> 
<profile> 
    <providers> 
     <remove name="MySQLProfileProvider"/> 
     <add name="MySQLProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/> 
    </providers> 
</profile>  
<roleManager enabled="true" defaultProvider="MySqlRoleProvider"> 
    <providers> 
     <remove name="MySqlRoleProvider"/> 
     <add name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/> 
    </providers> 
</roleManager> 

Global.asax

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
     if (HttpContext.Current.User != null) { 
      if (Request.IsAuthenticated == true) { 
       FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Context.Request.Cookies[FormsAuthentication.FormsCookieName].Value); 
       // In this case, ticket.UserData = "Admin"     
       string[] roles = new string[1] { ticket.UserData }; 
       FormsIdentity id = new FormsIdentity(ticket); 
       Context.User = new System.Security.Principal.GenericPrincipal(id, roles); 
      } 
     } 
    } 

Répondre

0

utilisent différentes sources de données que vous dans le développement et sur le serveur (je)? Si c'est le cas, assurez-vous que vos données sont synchronisées. Ce n'est probablement le cas que si vous spécifiez (local) ou . comme serveur dans votre connexion à la base de données.

Sinon, afficher dans un journal pour voir si les rôles d'utilisateur contiennent "admin".

0

Il s'est avéré que le problème était que j'avais désactivé viewstate sur l'ensemble du site dans mon web.config. Une fois que j'ai réactivé viewstate, l'information de rôle semblait persister comme prévu.

Questions connexes