كيف يمكنني الوصول إلى معرف المستخدم في ASP.NET العضوية دون استخدام العضوية.GetUser()?

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

سؤال

كيف يمكنني الوصول إلى UserId في ASP.NET العضوية دون استخدام Membership.GetUser(username) في ASP.NET تطبيق ويب المشروع ؟

يمكن UserId تدرج في Profile مساحة بجانب UserName (System.Web.Profile.ProfileBase)?

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

المحلول 3

قررت أن أكتب مصادقة المستخدمين على بلدي (بسيط جدا ولكنه يعمل) و يجب أن يتم هذا منذ وقت طويل.

سؤالي كان عن UserId وليس المتاحة من:

System.Web.HttpContext.Current.User.Identity.Name

نصائح أخرى

جرب هذا:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);

هو السبب في هذا إلى حفظ بيانات الاتصال في كل مرة كنت في حاجة إلى UserId?إذا كان الأمر كذلك ، عندما أنا باستخدام ASP.NET MembershipProvider, أنا عادة إما مخصص مزود يسمح لي ذاكرة التخزين المؤقت إلى تلك الدعوة ، أو أداة الطريقة التي يمكنني ذاكرة التخزين المؤقت.

إذا كنت تفكر في وضعها في الملف الشخصي, وأنا لا أرى الكثير من الأسباب للقيام بذلك ، خصوصا أنها أيضا سوف لا تزال تحتاج إلى قاعدة بيانات الدعوة إلا إذا كنت تستخدم ملف تعريف مخصص مزود هناك, وقد تم تجهيز تحليل من هوية المستخدم.

إذا كنت أتساءل لماذا لم تنفذ GetUserId طريقة, انها ببساطة لأنك لا يضمن دائما أن المستخدم معرف GUID كما شملت في مزود.

تحرير:

انظر ScottGu المادة على مقدمي الذي يوفر رابط تحميل شفرة المصدر الفعلي عن أيSqlMembershipProvider.

ولكن أبسط شيء نفعله حقا هو GetUserId (طريقة) في كائن المستخدم أو فئة فائدة ، حيث يمكنك الحصول على معرف المستخدم من ذاكرة التخزين المؤقت/الدورة إذا كان هناك وإلا ضرب قاعدة بيانات ذاكرة التخزين المؤقت من قبل المستخدم (أو مخزن في الدورة) ، وإعادته.

عن شيء أكثر للنظر (ولكن كن حذرا جدا لأن من الكعكة حجم القيود): أشكال المصادقة:عضوية والأدوار الشخصية مع أي من مقدمي الدورة لا

جرب ما يلي:

Membership.GetUser().ProviderUserKey
public string GetUserID()
            {
                MembershipUser _User;
                string _UserId = "";
                _User = Membership.GetUser();
                Guid UserId = (Guid)_User.ProviderUserKey;
                return _UserId = UserId.ToString();
            }

لديك خياران هنا:

1) استخدام اسم المستخدم المفتاح الأساسي المستخدم الخاص بك جدول البيانات أنا.هـ:

select * from [dbo.User] where Username = 'andrew.myhre'

2) إضافة معرف المستخدم إلى الملف الشخصي.

هناك إيجابيات وسلبيات كل طريقة.أنا شخصيا أفضل الأول لأنه يعني لا تحتاج بالضرورة إلى إعداد الخروج من مربع الشخصي مزود وأنا أفضل لفرض أسماء فريدة من نوعها في أنظمة بلدي على أي حال.

أندرو:سأكون حذرا من القيام استعلام مثل ما كنت قد تظهر بشكل افتراضي لا يوجد مؤشر على أن مباريات مع ذلك كنت عرضة لخطر من الجدول الكامل الفحص.وعلاوة على ذلك, إذا كنت تستخدم الخاص بك المستخدمين من قاعدة بيانات أكثر من تطبيق واحد ، لم تدرج معرف التطبيق.

أقرب مؤشر aspnet_Users_Index الذي يتطلب ApplicationId و LoweredUserName.

تحرير:

عفوا - قراءة أندرو آخر و هو لا يفعل حدد * على aspnet_Users الجدول, بل, تعريف مخصص/الجدول المستخدم باستخدام اسم المستخدم كمفتاح أساسي.

كان لي هذه المشكلة, الحل هو في شبكة الإنترنت.التكوين التكوين ، حاول تكوين شبكة الإنترنت.التكوين مع هذه:

 <roleManager
             enabled="true"
             cacheRolesInCookie="true"
             defaultProvider="QuickStartRoleManagerSqlProvider"
             cookieName=".ASPXROLES"
             cookiePath="/"
             cookieTimeout="30"
             cookieRequireSSL="false"
             cookieSlidingExpiration="true"
             createPersistentCookie="false"
             cookieProtection="All">
  <providers>
    <add name="QuickStartRoleManagerSqlProvider"
        type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="ASPNETDB"
        applicationName="SecurityQuickStart"/>
  </providers>
</roleManager>
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

سوف تعطيك UserID (uniqueidentifier) للمستخدم الحالي من aspnet_Membership الجدول - توفير الحالي بنجاح تسجيل الدخول.إذا كنت في محاولة <%= %> أو تعيين هذه القيمة قبل المصادقة الناجحة سوف تحصل على خطأ "كائن مرجع لم يتم تعيينها إلى مثيل كائن".

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

هل حاولت استخدام System.Web.HttpContext.Current.User.Identity.Name?(تأكد من تحقق من أن User و Identity غير null الأولى.)

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