WebSecurity.CreateUserAndAccount获取对创建用户的引用

use*_*258 6 asp.net-mvc-4

我正在研究ASP.NET MVC 4 Web应用程序.在创建用户和帐户(使用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...
            }
...
Run Code Online (Sandbox Code Playgroud)

这在我看来非常不优雅.特别是因为我自己维护UserId.有没有更优雅的方法来解决这个问题?

Noo*_*gen 12

如果您将UserId作为标识列,SimpleMembership将自动处理它.然后你可以得到生成的userId:var userId = WebSecurity.GetUserId(RegisterModel.UserName)

imho:SimpleMembership实现是一个POS.看看代码,这是一个很大的混乱.它试图变得灵活,但最终不是很灵活.它还要求UserId是一个int.再说一次,如果你能忍受它,那么好处是与第三方认证(facebook,twitter等)的自动集成.