2013-08-21 4 views
6

Я работаю над ASP.NET MVC 4 веб-приложение. После создания пользователя и учетной записи (с помощью WebSecurity.CreateUserAndAccount), я хочу продолжить работу с этим пользователем, например. для использования его в качестве внешнего ключа в другой модели.WebSecurity.CreateUserAndAccount получить ссылку на созданного пользователя

Один из подходов состоит в том, чтобы предоставить UserProfile пользовательский UserId и использовать этот UserId для запроса пользователя. Например:

... 
    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... 
      } 
... 

Это кажется мне довольно неэлегантным. Особенно из-за поддержки UserId самостоятельно. Есть ли более элегантный способ решить эту проблему?

ответ

12

Если у вас есть UserId в качестве столбца Identity, SimpleMembership будет обрабатывать его автоматически. Затем вы можете получить полученный userId с помощью: var userId = WebSecurity.GetUserId (RegisterModel.UserName)

imho: SimpleMembership - это POS. Взгляните на код, это большой беспорядок. Он пытается быть гибким, но не очень гибким. Также требуется, чтобы UserId был int. Опять же, если вы можете жить с ним, преимущество заключается в автоматической интеграции с сторонней аутентификацией (facebook, twitter и т. Д.)

Смежные вопросы