6

我正在开发一个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...
            }
...

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

4

1 回答 1

12

如果您将 UserId 作为 Identity 列,SimpleMembership 将自动处理它。然后您可以使用以下命令获取结果 userId: var userId = WebSecurity.GetUserId(RegisterModel.UserName)

恕我直言:SimpleMembership 实现是一个 POS。看一下代码,乱七八糟的。它试图变得灵活,但最终变得不是很灵活。还要求 UserId 是 int。再说一次,如果你能接受它,好处是自动集成第 3 方身份验证(facebook、twitter 等)。

于 2013-08-29T17:46:10.010 回答