دلیل false بودن User.Identity.IsAuthenticated بعد از Login چیست؟
سلام
یک پروژه با Asp.net core 2.2 دارم. بعد از اینکه کاربر لاگین انجام میده، میخوام چک کنم که آیا کاربر Authorize شده یا نه. با اینکه لاگین رو با دستور _signInManager.PasswordSignInAsync انجام میدم و پیغام success میده اما مقدار User.Identity.IsAuthenticated همیشه flase هست.
ضمنا موقع لاگین از Session استفاده میکنم.
کدهای لاگین به صورت زیر هست :
[HttpPost]
public async Task<IActionResult> AuthorizeCodeView(AuthorizeViewmodel model, string phNo)
{
ViewBag.Phone = phNo;
if (ModelState.IsValid)
{
try
{
if (model.AuthorizeCode == HttpContext.Session.GetString(phNo))
{
_iur.ConfirmPhoneNumber(phNo);
var result = await _signInManager.PasswordSignInAsync(phNo, "sS17481748$&", false, lockoutOnFailure: true);
if (result.Succeeded)
{
var user = await _userManager.FindByNameAsync(phNo);
var userRole = _userManager.GetRolesAsync(user).Result.ToArray();
if (user.FirstName == "" || user.FirstName == null ||
user.Family == "" || user.Family == null)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index", "UserInfo", new { area = "UserPanel", message = "لطفا جهت استفاده از امکانات سایت اطلاعات زیر را تکمیل کنید." });
}
}
else
{
return RedirectToAction("Index", "UserHome", new { area = "UserPanel" });
}
}
}
else
{
ModelState.AddModelError("AuthorizeCode", "کد وارد شده صحیح نیست");
return View();
}
//}
ModelState.AddModelError("AuthorizeCode", "لطفا مجددا تقاضای کد فعالسازی کنید");
return View();
}
catch
{
ModelState.AddModelError("AuthorizeCode", "لطفا مجددا تست کنید");
return View();
}
}
return View();
}
توی کدهای بالا و در خطی که کنترل شده User.Identity.IsAuthenticated همیشه مقدار false رو دارم و خط داخل شرط یعنی کد زیر اجرا نمیشه
return RedirectToAction("Index", "UserInfo", new { area = "UserPanel", message = "لطفا جهت استفاده از امکانات سایت اطلاعات زیر را تکمیل کنید." });
سلام دوست عزیز منطقی که شما در حال پیاده سازی آن می باشید اشتباه است البته به نظر خودم چرا؟؟؟؟؟ چون وقتی Result.Succeed موفق آمیز باشه و نتیجه درست رو برگدونه ینی کاربر لاگین کرده و دیگر نیازی به بررسی مجدد User.Identity.IsAutica.... نخواهد بود ضمنا استفاده از دستور User.Identity... در ویو های برنامه برای چک لاگین شدن کاربر برای نمایش قسمت خاصی از صفحه کابرد دارد نه در یک متد پست.
شما باید بعد از دستور زیر کاربر را به صفحه مور نظر خود هدایت کنید.
if (result.Succeeded)
پاسخ به mrhadiannet
ممنون از شما بابت پاسخ ولی وقتی کاربر لاگین میکنه دلیل نمیشه که Authorize هم شده. من میخوام کاربر رو بعد از لاگین هدایت کنم به یک کنترلر. این کنترلر دارای نقش User هست و تا زمانی که دستور User.Identity.IsAuticate برابر با false باشه کاربر نمیتونه وارد این کنترلر بشه. لاگین کردن دلیل بر این نیست که کاربر به همه کنترلرها یا اکشن ها دسترسی داره.
چرا Role های کاربر رو بررسی نمیکنی؟
کاربری که لاگین میکنه یه سری Role هم داره. با توجه به role ها هدایتش کن.
اگر هم role نداشت، یا لاگین نیست یا Authenticate نشده.
var UserRole = _userManager.GetRolesAsync(User).Result;
//redirect User
if (UserRole.Contains("Writer"))
{
return Redirect("/Writer/Home");
}
else
{
return Redirect("/Viewer/Home");
}
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2