Связывание MembershipUser и Web.Profile для вновь созданных пользователей - PullRequest
1 голос
/ 30 октября 2010

Я использую ASP.NET MVC 3. Я использую то, что по сути бесплатно, в шаблоне проекта Visual Studio для проекта MVC с опцией «Интернет-приложение». По сути, это обеспечивает проверку подлинности с помощью форм и предоставляет некоторые основные элементы для управления входом пользователя в систему и другими вещами.

Я также использую материал веб-профилей для хранения некоторых пользовательских полей. Все шло отлично. Я использую SuperFunProfile в качестве оболочки для экземпляра Profile, чтобы упростить доступ к свойствам профиля.

Пока я не хотел установить свойство профиля сразу после регистрации пользователя.

Проблема, которую я не могу решить, состоит в том, что this.Request.RequestContext.HttpContext.Profile содержит профиль для анонимного пользователя. Как я могу получить новый профиль для пользователя теперь, когда он должен быть зарегистрирован и вошел в систему?

    public ActionResult SignUp(SignUpModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus = this.MembershipService.CreateUser(model.UserName, model.Password, model.Email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                this.FormsService.SignIn(model.UserName, false /* createPersistentCookie */);

                var profile = new SuperFunProfile(this.Request.RequestContext.HttpContext.Profile);
                profile.DisplayName = model.UserName;
                profile.Save();

                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError(string.Empty, AccountValidation.ErrorCodeToString(createStatus));
            }
        }

Я осмотрел членство и Web.Profile, но не вижу ничего похожего на то, что это приблизит меня к моей цели.

Может быть, мне следует просто создать ProfileModel, который я сохраню в БД, а не использую Web.Profile? Я мог бы указать это на MembershipUser.ProviderUserKey, что облегчит создание ProfileModel при регистрации, я полагаю.

1 Ответ

2 голосов
/ 30 октября 2010

Я думаю, вы можете использовать событие MigrateAnonymous .

Когда пользователи входят в систему (то есть, когда они перестают быть анонимными пользователями), возникает событие MigrateAnonymous.Вы можете обработать это событие, чтобы при необходимости перенести информацию из анонимной личности пользователя в новую аутентифицированную личность.В следующем примере кода показано, как переносить информацию при аутентификации пользователя.

В вашем global.asax используйте что-то вроде

public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
  ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);

  Profile.ZipCode = anonymousProfile.ZipCode; //Your custom property
  Profile.CityAndState = anonymousProfile.CityAndState;//Your custom property
  Profile.StockSymbols = anonymousProfile.StockSymbols;//Your custom property

  ////////
  // Delete the anonymous profile. If the anonymous ID is not 
  // needed in the rest of the site, remove the anonymous cookie.

  ProfileManager.DeleteProfile(args.AnonymousID);
  AnonymousIdentificationModule.ClearAnonymousIdentifier(); 

  // Delete the user row that was created for the anonymous user.
  Membership.DeleteUser(args.AnonymousID, true);

}
...