مشکل در تولید توکن برای لاگین توسط 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 به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2