2013-08-21 15 views
6

Ich arbeite an einer ASP.NET MVC 4 Webanwendung. Nach dem Erstellen eines Benutzers und eines Kontos (mit WebSecurity.CreateUserAndAccount) möchte ich mit diesem Benutzer weiterarbeiten, z. um ihn als Fremdschlüssel in einem anderen Modell zu verwenden.WebSecurity.CreateUserAndAccount erhalten Verweis auf den erstellten Benutzer

Ein Ansatz wäre, dem UserProfile eine benutzerdefinierte UserId zu geben und diese UserId für die Abfrage des Benutzers zu verwenden. Zum Beispiel:

... 
    try 
      { 
       int CustomUserId = Rnd.Next(1000000, 9999999); 
       WebSecurity.CreateUserAndAccount(RegisterModel.UserName, RegisterModel.Passwordword, 
        propertyValues: new { UserId = CustomUserId }); 
       WebSecurity.Login(UserName, Password); 

       var UserProfile = (from UserProf in _db.UserProfiles 
           where UserProf.UserId == CustomUserId 
           select UserProf).FirstOrDefault(); 

       CustomModel cm = new CustomModel(); 
       cm.User = UserProfile; 

       //Add cm to database an so on... 

       return RedirectToAction("Index", "Home"); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       //Bla... 
      } 
... 

Dies scheint mir ziemlich unelegant. Vor allem, weil ich die UserId selbst gewartet habe. Gibt es einen eleganteren Weg, um dieses Problem zu lösen?

Antwort

12

Wenn Sie UserId als Identity-Spalte haben, wird SimpleMembership diese automatisch behandeln. Dann können Sie die resultierende userId mit erhalten: var userId = WebSecurity.GetUserId (RegisterModel.UserName)

imho: SimpleMembership Implementierung ist ein POS. Schau dir den Code an, es ist ein großes Durcheinander. Es versucht, flexibel zu sein, aber am Ende ist es nicht sehr flexibel. Es ist auch erforderlich, dass die UserId ein Int ist. Dann, wenn Sie damit leben können, ist der Vorteil der automatischen Integration mit 3rd-Party-Authentifizierung (Facebook, Twitter, etc ..)

Verwandte Themen