Создание учетных записей пользователей с помощью SimpleMembershipProvider

Я использую MVC 4 и пытаюсь добавить новое поле в профиль пользователя с именем AddedById (для ведения домашнего хозяйства).

Вот что у меня есть:

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 после создания учетной записи?


person Community    schedule 19.05.2013    source источник
comment
Зачем вам это, если у вас уже есть Userid с Userprofile?   -  person Komengem    schedule 19.05.2013
comment
@KomengeMwandila Потому что служба поддержки может создать учетную запись для кого-то.   -  person    schedule 19.05.2013
comment
Если администратор создает учетную запись, то этот пользователь вошел в систему ... поэтому у вас есть идентификатор, и вы можете включить его при создании новой учетной записи.   -  person Jasen    schedule 20.05.2013


Ответы (1)


Поскольку служба поддержки может создать учетную запись для кого-то.

Если это так, убедитесь, что AddedByID является Nullable, а затем сначала аутентифицируйте Support Team, прежде чем они создадут User.

Затем сделайте так, чтобы ваш 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);
    }
person Komengem    schedule 19.05.2013
comment
Спасибо. Я понимаю, что у вас здесь, но как быть, когда пользователь создает свою учетную запись? Было бы лучше использовать транзакцию, которая создает пользователя и обновляет поле AddById? - person ; 20.05.2013
comment
@hbrock Я предложил сделать AddedById Nullable, чтобы, когда владелец учетной записи был тем, кто ее создает, AddedById был Null, и это должно быть достаточным указанием на то, кто создал учетную запись. Кроме того, вы избегаете ненужного обращения к базе данных. - person Komengem; 20.05.2013