مشکل در تولید توکن برای لاگین توسط jwt در Asp.net Core 7
باسلام و احترام در پروژه ای که دارم کاربر بر اساس احراز هویت و ساختن توکن باید وارد برنامه و پنل خود شود برنامه مرتب با مشکل مواجه میشود و تازمانی که در کنترولر AccountController بخش های زیررا غیر فعال نکنی به هیچ عنوان کاربرقادر به ورود به پنل اصلی خود نمی باشد
var claims = new List<Claim>()
{
new Claim("Token", result.Result.Token),
new Claim("Role", result.Result.Roles.ToString()),
new Claim("UserID", result.Result.UserID),
new Claim(ClaimTypes.Role, string.Join(",",result.Result.Roles))
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
var properties = new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddHours(6)
};
await HttpContext.SignInAsync(principal, properties);
_config["FiscalYear"] = FiscalYear + "";
_config["UserID"] = claims[2].Value;
با حذف توکن مقدار _config["UserID"] = claims[2].Value; را نیز باید به _config["UserID"] = claims[1].Value; تبدیل کرده
همچنین در بخش api نیز در کنترولر AccountApiController باید تغییرات زیر را اعمال کرد تا کاربر که درابتدا برنامه ثبت دیتا بیس شده است بتواند بدون مشکل وارد برنامه شود.
public class AccountApiController : ControllerBase
{
private readonly UserManager<ApplicationUsers> _userManager;
private readonly SignInManager<ApplicationUsers> _signInManager;
private readonly IJwtTokenGenerator _token;
public AccountApiController(UserManager<ApplicationUsers> userManager,
SignInManager<ApplicationUsers> signInManager,
IJwtTokenGenerator token)
{
_userManager = userManager;
_signInManager = signInManager;
_token = token;
}
قابل ذکر که تا تغییرات فوق را اعمال نکنی هیچ کاربری نمی تواند وارد پنل ادمین شود با postmane هم چک کرده ام کلا توکن را نمی سازد الان فصل 85 دوره هستم دوسه بار همه مسیرهایی رو که در آموزش گفته شد را انجام دادم ولی بازم هم توکن را نمی سازد و زمانی که توکن ایجاد نشود مرتب در پنل login پیام نام کاربری و پسورد اشتباه است را صادر می کند ولی به محض اینکه تغییرات فوق اعمال می شود وارد همه بخش ها شده حتی userid مربوط هم در همه ثبت ها در فیلد مربوط ثبت می شود از آنجایی که این آموزش را صرفا به خاطر بخش jwt آن تهیه نموده ام الان واقعا ناامیدم استاد گرامی که چرا علی رقم همه راهنمایی های عالی شما در برنامه (جز بهترین آموزش هایی بود که تا الان در این زمینه دیده ام) چرا احراز هویت به درست اعمال نمی شود ممنون میشم راهنمایی بفرمایید با تشکر.
پاسخ هوش مصنوعی
به نظر می رسد که در رندر توکن Jwt و تنظیم احراز هویت در ASP.NET Core 7 مشکل دارید. در زیر چند نکته و راهنمایی برای رفع اشکال آورده شده است:
1. اطمینان حاصل کنید که IJwtTokenGenerator به درستی پیاده سازی شده است و توکن ها به طور صحیح تولید می شوند. برای این کار ممکن است بخواهید متد تولید توکن را بررسی کنید.
2. بررسی کنید که آیا result.Result.Token در واقع توکن معتبر و غیر خالی را برمی گرداند یا خیر.
3. حتماً هنگام تولید توکن از تمام موارد مورد نیاز (مانند UserID و Roles) استفاده کنید تا به درستی در claims ذخیره شوند.
4. نحوه استفاده از توکن را در درخواست های بعدی بررسی کنید. باید اطمینان حاصل کنید که توکن در هدر درخواست ها به درستی ارسال می شود.
5. اطمینان حاصل کنید که AccountApiController به درستی در DI (Dependency Injection) پیکربندی شده باشد. می توانید بررسی کنید که کلاس های UserManager و SignInManager به درستی ثبت شده اند.
در مورد کد شما، موارد زیر را لحاظ کنید:
var claims = new List<Claim>()
{
new Claim("Token", result.Result.Token),
new Claim("Role", result.Result.Roles.ToString()),
new Claim("UserID", result.Result.UserID),
new Claim(ClaimTypes.Role, string.Join(",",result.Result.Roles))
};
var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var principal = new ClaimsPrincipal(identity);
var properties = new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddHours(6)
};
await HttpContext.SignInAsync(principal, properties);
با ترمیم و اصلاح ساختار claims و اطمینان از صحت داده ها می توانید مشکل را حل کنید. در صورت ادامه مشکل، ورودی های ورود به سیستم و دستورات مربوط به آن را نیز بررسی کنید.
سلام
بله jwt منم به مشکل خورد ولی با netcore 7 هیچ مشکلی نبود زمانی که پروژه خودم که پروژه خودم رو به netcore 8 آپدیت کردم خطا پیش اومد و توکن ساخته نمیشد
مشکل زمانی حل شد که داخل فایل appsettings.json مقدار TokenKey رو تعداد ارقام رو 2 برابر کردم یعنی تعداد کاراکتر هارو 2 برابر کردم و مشکل کاملا حل شد
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- چرا استوری های واتس اپ برای دوستان نمایش داده نمیشن ؟
- چند تا استوری رایگان می تونیم تلگرام بذاریم ؟
- خطای Severity Code Description Project هنگام استارت پروژه
- کار نکردن navBar و sideBar در پروژه Asp.net core
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2