2012-01-02 2 views
1

J'ai eu un travail d'adhésion asp.net 4 wesite pendant environ 5 mois et aujourd'hui j'ai changé la regex pour desserrer les restrictions de mot de passe. Je peux toujours créer et accéder à de nouveaux comptes, mais je ne peux plus accéder à aucun des comptes précédemment enregistrés.ASP.NET 4 Clé de machine d'adhésion

J'ai vérifié la base de données et confirmé qu'ils sont toujours là. Ma première pensée était un mot de passe incorrect. J'ai vérifié deux comptes dont je connaissais le mot de passe et les deux sont inaccessibles. J'ai essayé d'utiliser l'option de récupération de mot de passe, mais quand je tape le nom d'utilisateur, on me dit que l'utilisateur n'existe pas.

Lorsque je vérifie les bases de données et consulte à la fois les tables d'appartenance et de profil, les anciens et les nouveaux utilisateurs, avant et après modification de regex, se trouvent tous dans la même table. Cela m'amène à ma découverte finale et celle que je n'ai pas d'expérience. Y a-t-il une nouvelle clé machine qui crée les nouveaux utilisateurs mais ne peut pas déchiffrer les anciens, les rendant ainsi indisponibles? Si oui, comment puis-je résoudre ce problème?

+0

viens de remarquer que l'ID d'application est différente pour les nouveaux utilisateurs dans la table des membres. Cela pourrait-il causer l'erreur? Si oui, comment puis-je le remplacer par l'ancien? – Rob

Répondre

1

Comme votre commentaire, ma première pensée a été que la clé d'application a été modifiée. Cette clé est stockée dans web.config/system.web/adhésion:

<membership> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlMembershipProvider" 
     ... 
     applicationName="YOUR_KEY_HERE" /> 
    </providers> 
</membership> 

Cette clé permet aux applications différentes avec le même fournisseur d'appartenances (par exemple, le System.Web.Security.SqlMembershipProvider dans votre cas) pour utiliser la même base de données pour stocker des données d'adhésion.

Un fournisseur ne verra pas les utilisateurs de l'autre fournisseur et vice versa, car ils prennent en compte le nom d'application lors de l'interrogation de la base de données. Mais lorsque vous regardez la table Utilisateurs, vous ne remarquerez peut-être pas immédiatement la relation, puisque le SqlMembershipProvider utilise un Guid dans la table Utilisateurs. Mais c'est une clé étrangère à la table des applications, où vous pouvez trouver le nom de l'application.

Voir aussi: Always set the "applicationName" property when configuring ASP.NET 2.0 Membership and other Providers

0

Mon problème était légèrement différent * mais j'ai spécifié ma propre clé machine dans web.config. Voir les détails ici: http://msdn.microsoft.com/en-us/library/ff649308.aspx

(. * Mon application errait de serveur à serveur dans une grande batterie de serveurs virtualisés changeant donc la clé de la machine à chaque saut provoquant l'application étant incapable de lire les cookies qu'il a déjà mis)

+2

Il s'est avéré que ça n'avait rien à voir avec la clé de la machine, heureusement. C'était un changement dans le nom de l'application parce que j'avais fait une copie du site pour apporter des modifications majeures et les télécharger à partir de la copie, de sorte que les nouveaux membres pouvaient accéder à leurs comptes mais les anciens membres ne pouvaient pas. J'ai corrigé ceci en ajoutant les deux noms d'application au fichier web.config et hop, ça a marché! – Rob