1

私はASP.NET MVC 3を使用しています。「インターネットアプリケーション」オプションを使用して、MVCプロジェクトのVisual Studioプロジェクトテンプレートに本質的に無料で付属しているものを使用しています。基本的に、これによりフォーム認証が導入され、ユーザーのログインなどを管理するためのいくつかの基本的な要素が提供されます。

また、いくつかのカスタム フィールドを保存するために、これと一緒に Web プロファイルを使用しています。すべてが順調に進んでいました。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));
            }
        }

Membership と Web.Profile を調べてみましたが、目標に近づくようなものは見当たりません。

Web.Profile を使用するのではなく、自分自身を DB に格納する ProfileModel を作成する必要があるのでしょうか。MembershipUser.ProviderUserKeyサインアップ時に ProfileModel を簡単に作成できるようにキーを設定できると思います。

4

1 に答える 1

2

MigrateAnonymousイベントを使用できると思います。

ユーザーがログインすると (つまり、匿名ユーザーでなくなると)、MigrateAnonymous イベントが発生します。必要に応じて、このイベントを処理して、ユーザーの匿名 ID から新しい認証済み ID に情報を移行できます。次のコード例は、ユーザーが認証されたときに情報を移行する方法を示しています。

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);

}
于 2010-10-30T19:43:00.717 に答える