ربط العضوية و web.profile معًا للمستخدمين الذين تم إنشاؤهم حديثًا

StackOverflow https://stackoverflow.com/questions/4059521

سؤال

أنا أستخدم 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));
            }
        }

لقد تجولت حول العضوية والويب.

ربما يجب أن أقوم فقط بإنشاء profilemodel التي أخزنها في DB بدلاً من استخدام الويب. يمكنني أن أتصدر ذلك MembershipUser.ProviderUserKey مما يجعل من الأسهل إنشاء profilemodel في التسجيل ، أفترض.

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك استخدام 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);

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top