سؤال

لدي وحدة تحكم التي تحميها [Authorize] السمة.

هذا يعمل بشكل جيد جدا (أنا أرسلت مرة أخرى لتسجيل الدخول إذا لم أكن تسجيل الدخول) ، ولكن أود أن أضيف بعض الأدوار إلى هذه السمة ، لقد قرأت أنه من الممكن أن تفعل شيئا مثل [Authorize(Roles = "Customer"] ولكن عندما أفعل هذا أنا أرسلت على الفور إلى صفحة تسجيل الدخول على طلبي?

هل هذا Roles تجاوز لا يعمل مع الجديد ASP.NET هوية?في إنشاء المستخدم الخاص بي ، أقوم بإضافة المستخدم إلى الكود التالي:

var user = new ApplicationUser {UserName = model.Username};
var result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
    UserManager.AddToRole(user.Id, "Customer");
    SignIn(user, false);

    return RedirectToAction("Done");
}

ووفقا لقاعدة البيانات ، يكون المستخدم في هذا الدور.لماذا هذا لا يعمل?أنا في عداد المفقودين التكوين أو نوعا?

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

المحلول

سأجيب على سؤالي الخاص.

السبب في أن هذا لم يكن يعمل (ساعات من الحفر) كان ذلك لأن سياقي كان يحتوي على ما يلي:

Configuration.ProxyCreationEnabled = false;

هذا جعل لازيلوادينغ تعطيل وبالتالي الأدوار غير المدرجة ، عندما تم تحميل المستخدم!

لذلك كان الإصلاح لتمكين هذا أو إزالة الخط.

تحديث:2015-05-01

كان هذا خطأ ، تم إصلاحه في الإصدار 2.0.0-ألفا 1.وبالتالي ، لم يعد هذا الحل ضروريا للمضي قدما ، وسيتم تحميل الأدوار بغض النظر عن هذا الإعداد.

هل تتطلب الهوية أوين تحميل كسول?

نصائح أخرى

إنشاء دور مثل ذلك:

RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));

ثم ، إضافة مستخدم مثل ذلك:

var currentUser = UserManager.FindByName(user.UserName); 
var roleresult = UserManager.AddToRole(currentUser.Id, "Superusers");

واسمحوا لي أن أعرف إذا كان هذا يعمل من أجلك.

أنه يعمل بشكل جيد مع هوية أسبنيت في حالتي.هل أنت متأكد من أنك:

  • لم تقم بتخصيص فلاتر التفويض أو فعلت ذلك بشكل صحيح?
  • لم تقم بإعادة تكوين المصادقة / التفويض في الويب.التكوين?
  • لديك إدخالات مناسبة في جداول هوية أسبنيت:اسبنيتوسرز, اسبنيترولز, اسبنيتوسرولز (الدور موجود والمستخدم لديه)?

الخروج هذه الإجابة: ASP.NET أدوار المستخدم التحقق من الهوية لا يعمل

في حالتك ، أثناء التحقق من الحالة ، قارن حالة سجل إيدنتيرول وتفويض السمة.لا تقارن مع UserManager.AddToRole(user.Id, "Customer");

أنا أكتب عينة لاختباره ، وأنها تعمل good.so أعتقد أن هناك 2 نقطة
1.لا يتم حفظ ملف تعريف الارتباط في المتصفح
2.أنت ملف تعريف الارتباط ليس مع معلومات الدور

تحقق من ملف تعريف الارتباط ، هل هناك ملف تعريف ارتباط اسمه".اسبنيت.تطبيقكوكي" (الاسم الافتراضي)
إذا لم يكن الأمر كذلك ، فتحقق من السماح لك بكتابة ملف تعريف الارتباط ، أو الرمز الذي تكتبه ملف تعريف الارتباط
إذا إكسسيت ، يمكنك إنشاء فئة يمتد

ISecureDataFormat<AuthenticationTicket>  

والتكوين

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            TicketDataFormat=new T()

        });

جديد تي () هو الطبقة
في هذه الفئة تحتاج إلى القيام به

public string Protect(AuthenticationTicket data)

و

public AuthenticationTicket Unprotect(string protectedText)

ومن بعض الشيء عن تسلسل
يمكنك تعيين نقطة فاصل ، والتحقق من البيانات,
في البيانات.الهوية.المطالبات (عدد لا يحصى< مطالبة>) يجب أن يكون مطالبة مع معلومات دورك

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