2012-11-05 5 views
7

dodałem niestandardowego pola do stołu UserProfile nazwie ClassOfYear i jestem w stanie uzyskać dane w profilu podczas rejestracji tak:Zaktualizuj niestandardowe pola profilu użytkownika za pomocą SimpleMembershipProvider?

var confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName, 
    model.Password, 
    propertyValues: new { ClassOfYear = model.ClassOfYear }, 
    requireConfirmationToken: true); 

Jednak teraz chcę, aby móc zaktualizować profil w przypadku Zarządzam tym, ale nie mogę znaleźć metody, aby to zrobić. Czy muszę samodzielnie aktualizować tabelę UserProfile? Jeśli nie, jaki jest odpowiedni sposób na zrobienie tego?

FYI, używam Dappera jako mojej warstwy dostępu do danych, na wszelki wypadek. Ale, jak powiedziałem, mogę po prostu zaktualizować tabelę UserProfile przez Dapper, jeśli to właśnie powinienem zrobić, po prostu uznałem, że klasa WebSecurity, lub coś podobnego, miała już sposób, ponieważ niestandardowe pola profilu użytkownika są zintegrowane z Metoda CreateUserAndAccount.

Dzięki!

Odpowiedz

4

Nie ma nic w kodzie SimpleMembershipProvider, które robi cokolwiek z dodatkowymi polami, za wyjątkiem tworzenia.

Po prostu zapytaj wartości samodzielnie z ORM.

Możesz użyć WebSecurity.GetUserId (User.Identity.Name), aby uzyskać identyfikator użytkownika, a następnie Dapper, aby przetestować tabelę UserProfile.

+1

Niesamowite, dzięki! Metoda 'WebSecurity.GetUserId' właśnie pozbyła się TONY subdomen, które napisałem! Wielkie dzięki! –

+1

Arg. Myślę, że myliłem się tutaj, nurkując bardziej w szczegóły, ponieważ jest to głównie nieudokumentowane. Po dalszych badaniach wydaje mi się, że jest to teraz możliwe:) Zobacz: WebSecurity.CreateUserAndAccount (userName, hasło, new {CustomPropertyName = WhateverValue}, false); Możesz pobrać ten plik źródłowy i zobaczyć, że pobiera on słownik i analizuje każdą wartość i wstawia do bazy danych. –

+0

Ale to nie wykona prawa "UPDATE"? Ponieważ używam tej metody do "WSTAW" wartości już (jak widać na moim pytaniu w rzeczywistości). –

2

Na wszelki wypadek, gdy ktoś ma ten sam problem. Po wielu walkach z SimpleMembership otrzymałem rozwiązanie, które zapełnia zarówno tabelę webpages_Membership, jak i mój Custom Users. Dla wyjaśnienia śledzić moje kod:

public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      TUsuario userDTO= new TUSer() 
       { 
        Name = model.Name, 
        Login = model.Login, 
        Pass = model.Pass.ToString(CultureInfo.InvariantCulture), 
        Active = true, 
        IdCompany = model.IdCompany, 
        IdUserGroup = model.IdUserGroup, 
       }; 
      try 
      { 
       WebSecurity.CreateUserAndAccount(model.Login, model.Pass, new { IdUser = new UserDAL().Seq.NextVal(), Name = userDTO.Name, Login = userDTO.Login, Active = userDTO.Active, Pass = userDTO.Pass, IdCompany = userDTO.IdCompany, IdUserGroup = userDTO.IdUserGroup }); 

       WebSecurity.Login(model.Login, model.Pass); 

Po przeklinając Ramy dużo, że dał mi rozkosz świeżego powietrza :)

PS .: tabela użytkowników jest określony w pliku Global.asax pomocą WebSecurity.InitializeDatabaseConnection functon.