2013-05-19 3 views
0

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

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

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

+0

Зачем вам это нужно, когда у вас уже есть 'Userid' с' Userprofile'? – Komengem

+0

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

+0

Если администратор создает учетную запись, тогда этот пользователь входит в систему ... поэтому у вас есть идентификатор и может включать его при создании новой учетной записи. – Jasen

ответ

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); 
    } 
+0

Спасибо. Я понимаю, что у вас здесь, но как насчет того, когда пользователь создает свою собственную учетную запись? Было бы лучше использовать транзакцию, которая создает пользователя и обновляет поле AddById? –

+0

@hbrock Я предложил сделать 'AddedById'' Nullable', так что, когда владельцем учетной записи является тот, который ее создает, 'AddedById' является' Null', и это должно быть достаточно показательно, для кого создана учетная запись. Кроме того, вы избегаете ненужной поездки обратно в базу данных. – Komengem

Смежные вопросы