دلیل 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 = "لطفا جهت استفاده از امکانات سایت اطلاعات زیر را تکمیل کنید." });
پاسخ هوش مصنوعی
با توجه به توضیحات شما، ممکن است دلایل زیر باعث شده باشد که مقدار User.Identity.IsAuthenticated پس از لاگین به false باقی بماند:
عدم تنظیمات Middleware احراز هویت: اطمینان حاصل کنید که middleware مربوط به احراز هویت در
Startup.csبه درستی تنظیم شده باشد. باید متدapp.UseAuthentication();را در متدConfigureاضافه کنید.عدم ایجاد کوکی احراز هویت: اطمینان حاصل کنید که سیستم کوکی احراز هویت پیکربندی شده است تا پس از لاگین، یک کوکی برای کاربر ایجاد شود.
اجازه دسترسی به Session: در صورتی که از Session استفاده می کنید، باید اطمینان حاصل کنید که Session درست پیکربندی شده باشد و هیچ تداخلی با احراز هویت وجود نداشته باشد.
تست در محیط مناسب: اگر در محیط لوکال تست می کنید، اطمینان حاصل کنید که همه جزییات پیکربندی شامل URL و پلتفرم به درستی تنظیم شده باشد. برخی اوقات در محیط های مختلف رفتار متفاوتی دارند.
شما همچنین می توانید بررسی کنید که آیا در قانونی که مربوط به AuthorizeCode است (برای تأیید شماره تلفن) روند لاگین تحت تأثیر قرار می گیرد یا خیر. آنگاه می توانید به صورت زیر به کد login اضافه کنید:
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
}
این خط اطمینان می دهد که کاربر بعد از لاگین، به درستی احراز هویت شود.
سلام دوست عزیز منطقی که شما در حال پیاده سازی آن می باشید اشتباه است البته به نظر خودم چرا؟؟؟؟؟ چون وقتی 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");
}
- آموزش استفاده از پلاگین گردونه شانس در 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