【问题标题】:Creating User Accounts with SimpleMembershipProvider使用 SimpleMembershipProvider 创建用户帐户
【发布时间】:2013-05-20 04:21:44
【问题描述】:

我正在使用 MVC 4,我正在尝试向 UserProfile 添加一个名为 AdditionalById 的新字段(用于管理事务)。

这是我所拥有的:

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
                {
                    FirstName = model.FirstName,
                    LastName = model.LastName,
                    AddedDate = DateTime.UtcNow
                    AddedByID = // to sure how to get the id because the account has not been created yet.
                });

我应该在创建帐户后更新 AddById 吗?

【问题讨论】:

  • 既然已经拥有UseridUserprofile,为什么还需要它?
  • @KomengeMwandila 因为支持团队可以为某人创建帐户。
  • 如果管理员正在创建帐户,则该用户已登录...因此您拥有 ID,并且可以在创建新帐户时包含它。

标签: asp.net-mvc-4 simplemembership


【解决方案1】:

因为支持团队可以为某人创建帐户

如果是这种情况,请确保AddedByIDNullable,然后在创建User 之前先验证Support Team

然后,让你的Register Action 看起来像这样;

    //
    // POST: /Account/Register

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            using (EfDb db = new EfDb())
            {                                     
                try
                {
                    var userProfile = db.UserProfiles.Local.SingleOrDefault(u => u.UserName == User.Identity.Name)
                                ?? db.UserProfiles.SingleOrDefault(u => u.UserName == User.Identity.Name);

                        WebSecurity.CreateUserAndAccount(
                            model.UserName,
                            model.Password,
                                new
                                    {
                                        FirstName = model.FirstName,
                                        LastName = model.LastName,
                                        AddedDate = DateTime.UtcNow,
                                        AddedByID = userProfile.UserId
                                    }
                            );

                catch (MembershipCreateUserException e)
                {
                    ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
                }
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

【讨论】:

  • 谢谢。我了解您在这里的情况,但是当用户创建自己的帐户时呢?最好使用创建用户并更新 AddById 字段的事务?
  • @hbrock 我建议创建AddedById Nullable 这样当帐户的所有者是创建它的人时,AddedByIdNull,这应该足以说明谁,创建帐户。此外,您还可以避免不必要的返回数据库。