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

사용자 ID가 Identity 열인 경우 SimpleMembership에서 자동으로 처리합니다. 그런 다음 결과 userId를 가져올 수 있습니다. var userId = WebSecurity.GetUserId (RegisterModel.UserName)

imho : SimpleMembership 구현은 POS입니다. 코드를 한번보세요. 큰 혼란입니다. 그것은 유연하게하려고하지만 매우 융통성있게 끝나지 않습니다. 또한 UserId가 int 여야합니다. 그런 다음 다시 살 수 있다면 그 이점은 타사 인증 (페이스 북, 트위터 등)과의 자동 통합입니다.

관련 문제