2009-07-07 9 views
1

Le système d'appartenance ASP.NET utilise un nom d'utilisateur unique pour identifier un utilisateur. Que dois-je faire si je dois me connecter aux utilisateurs par courrier électronique?Système de profil/système d'appartenance avec courrier électronique en tant que connexion

Je pourrais juste passer le E-Mail dans la propriété pour le nom d'utilisateur, mais alors les choses deviennent un peu brouillon. L'utilisateur peut vouloir modifier l'adresse e-mail.

Y a-t-il des ressources disponibles qui décrivent un bon moyen de l'implémenter?

Répondre

2

Votre approche de l'utilisation de l'adresse e-mail comme nom d'utilisateur fonctionne bien pour moi. Mais tu as raison; il devient désordonné lorsque l'adresse e-mail est modifiée. L'approche que nous avons adoptée était lorsque l'utilisateur souhaite changer son adresse e-mail, nous changeons également son nom d'utilisateur. La seule façon de le faire était de manipuler directement la base de données. Nous avons pris soin de nous assurer que toute référence à l'utilisateur était faite via l'UserId; cela a assuré que le changement de nom d'utilisateur n'a rien cassé.

Voici le code que nous avons utilisé, au cas où vous seriez intéressé. Le code est dans une classe persistante qui encapsule la classe MembershipUser et est stockée en tant que relation un-à-un. Ignorez simplement la construction de chaîne SQL maléfique et faites quelque chose de mieux;)

IDbCommand cmd = connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Users SET UserName = '{0}', LoweredUserName = '{0}' WHERE UserId = '{1}'", 
    DatabaseManager.SqlEscape(value.ToLower()), this.Id); 
cmd.ExecuteNonQuery(); 

cmd = connection.CreateCommand(); 
cmd.CommandType = CommandType.Text; 
cmd.CommandText = string.Format(
    "UPDATE dbo.aspnet_Membership SET Email = '{0}', LoweredEmail = '{0}' WHERE UserId = '{1}'", 
    DatabaseManager.SqlEscape(value.ToLower()), this.Id); 
cmd.ExecuteNonQuery();