با عرض سلام خدمت شما استاد عزیز
به یاد دارم شما در ابتدای جلسه 25 فرموده بودین که اگر در این بخش:
[Route("Login")]
public IActionResult Login(string returnUrl = "/")
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
مقدار اولیه بدیم مشکل حل میشه ولی اگر در ادامه این مسیر رو طی کنید شما هم این مشکل رو مشاهده می کنید:
1- از بخش " ورود به سایت " وارد بشین و یک user و pass اشتباه وارد کنید.
2- حالا که ارور " اطلاعات وارد شده اشتباه است " مواجه شدین، user و pass صحیح رو وارد کنید.
اون موقع هست که شما مجددا ارور The returnUrl field is required رو دریافت می کنید.
من تست کردم اگر توی بخش بعدی returnUrl رو nullable کنید، exception دریافت می کنید.
برای همین تنها راهی که در حال حاضر پیدا کردم اینه که به این بخش هم مقدار اولیه بدیم:
public async Task<IActionResult> Login(LoginViewModel login, string returnUrl = "/")ولی یک مشکل خاص دیگری ایجاد میشه:
مثلا می خواسته بره به صفحه userpanel ولی چون لاگین نبوده فرستاده میشه به صفحه login، اینجا یک مرتبه user و pass اشتباه وارد می کنه و مجددا user و pass صحیح رو می زنه ولی الان اتفاقی که میافته به جای userpanel میره صفحه اصلی؛ البته ناگفته نماند که اگر از اول user و pass رو درست وارد کنه به مشکلی نمی خوره.
ولی چون از همون اول هم نسبت به URL Hijacking اطلاعی نداشتم، می ترسم با مقداردهی اولیه مشکل امنیتی هم ایجاد بشه!
ممنون میشم، راهنمایی بفرمایید.
سلام ، وقت بخیر
در جلسه بعد این مورد را بررسی و رفع خواهیم کرد
سلام
من returnUrl رو توی LoginViewModel گذاشتم و الان تست کردم و این مشکل رو نداشتم
اینو بذار توی LoginViewModel
public string? ReturnUrl { get; set; }توی Login.cshtml هم اینو بذار توی تگ فرم
@Html.HiddenFor(a => a.ReturnUrl)اکشن گت Login هم این شکلیش کن
[HttpGet("Login")]
public IActionResult Login(string? ReturnUrl)
{
return View();
}
ولی مسئلش اینه که با توجه به اینکه ReturnUrl را نه با استفاده از مدل و نه با استفاده از ViewBag نفرستادم سمت ویو.
چطوری داره کار میکنه؟؟؟؟