دسته بندی ها
16:03 1401/06/05

خطا در احراز هویت در Asp.net Core و هدایت به صفحه Access Denide

مشخصات سوال کننده :
کاربر : farhadrezazadeh     امتیاز کاربر : 3     رتبه کاربر : 136
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    1
تعداد بازدید این سوال : 1743
3 نظر
fateme : کدهایی که شما در سوالتون قرار دادید مربوط به عملیات ثبت نام هست. در این کدها نه احراز هویتی هست و نه دریافت نقش کاربر. طبیعی هست که این دستورات Authorize کار نکنه.

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 06:01 1401/06/05
saedbfd : در جدول AspNetUserRole اطلاعات به درستی ثبت شده ؟

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 00:27 1401/06/06
saedbfd : دستوراتی که شما نوشتید همه درسته. احتمالا در جدول AspNetUserRoles اطلاعات به درستی ثبت نشده.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 07:13 1401/06/06
ادامه نظرات ...
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل مشکل دسترسی در ASP.NET Core، ابتدا مطمین شوید که کاربر به درستی به نقش ها اضافه شده است و همچنین نقش ها به درستی در پایگاه داده ذخیره شده اند. به طور کلی، مراحلی که می توانید دنبال کنید عبارتند از:

1. **مطمین شوید کاربر به نقش اضافه شده است**: بعد از ثبت نام کاربر، از کد زیر برای اضافه کردن نقش استفاده کنید:

await _userManager.AddToRoleAsync(mapUser, "User");

2. **احراز هویت و نقش ها را بررسی کنید**: اطمینان حاصل کنید که کاربر با موفقیت وارد سیستم شده و نقش های آن به درستی بارگذاری شده است.

3. **تنظیمات Startup.cs**: در فایل Startup.cs مطمین شوید که سرویس ها و Middlewareهای احراز هویت به درستی تنظیم شده اند:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentity()
            .AddEntityFrameworkStores()
            .AddDefaultTokenProviders();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("UserOnly", policy => policy.RequireRole("User"));
        options.AddPolicy("AdminOnly", policy => policy.RequireRole("Admin"));
    });

    // سایر تنظیمات
}

4. **چک کردن middleware**: از middleware امنیتی در متد Configure اطمینان حاصل کنید:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();

    // سایر middleware ها
}

5. **بررسی لاگ ها**: اگر مشکل همچنان پا برجا بود، لاگ ها را بررسی کنید تا متوجه شوید چرا کاربر به صفحه "Access Denied" هدایت می شود.

اگر تمام مراحل بالا را انجام دادید و هنوز مشکل دارید، می توانید با استفاده از دیباگر، کد را بررسی کنید که آیا کاربر به درستی نقش دریافت می کند یا خیر.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamid_b 18:09 1401/06/05

احراز هویت و دریافت نقش کاربران در Asp.net Core معمولا هنگام لاگین و یا ثبت نام و سپس لاگین انجام میشه. در کدهای شما فقط عملیات ثبت نام انجام شده. چند تا نکته رو چک کنید.

  • در جداول آیدنتیتی در Sql Server دقت کنید که در جدول AspNetUserRole باید نقش به کاربر اختصاص داده شده باشه.
  • در فایل Startup.cs از میان افزارهای زیر استفاده شده باشه.
app.UseAuthentication();
app.UseAuthorization();
  • هنگام لاگین یا قبل از Redirect کاربر به پنل کاربری حتما باید نقش های کاربر رو که در جدول AspNetUserRoles هست رو بدست بیارید توسط دستور زیر :
var roles = await _userManager.GetRolesAsync(user);

 

به این پاسخ امتیاز بدهید    1
امتیاز: 518 رتبه: 4
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود