دسته بندی ها
21:06 1398/09/06

انتقال کاربر به مسیر خاص بعد از لاگین در Asp.net core

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Core Asp.net Web Form Asp.net Mvc

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3851
هوش مصنوعی

پاسخ هوش مصنوعی

برای هدایت کاربران به مسیر خاص بعد از لاگین در ASP.NET Core، شما می توانید از قابلیت SignInManager و Claims استفاده کنید. در اینجا یک نمونه کد برای انجام این کار آورده شده است:

public class AccountController : Controller
{
    private readonly SignInManager _signInManager;
    private readonly UserManager _userManager;

    public AccountController(SignInManager signInManager, UserManager userManager)
    {
        _signInManager = signInManager;
        _userManager = userManager;
    }

    [HttpPost]
    public async Task Login(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = await _userManager.FindByNameAsync(model.Username);
            if (user != null)
            {
                var result = await _signInManager.PasswordSignInAsync(user, model.Password, model.RememberMe, lockoutOnFailure: false);
                if (result.Succeeded)
                {
                    // هدایت بر اساس نقش
                    if (await _userManager.IsInRoleAsync(user, "Admin"))
                    {
                        return RedirectToAction("Index", "Admin"); // پنل ادمین
                    }
                    else if (await _userManager.IsInRoleAsync(user, "User"))
                    {
                        return RedirectToAction("Dashboard", "User"); // داشبورد کاربر معمولی
                    }
                }
            }
            // اگر لاگین ناموفق بود
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
        }

        return View(model);
    }
}

در این کد، بعد از یک لاگین موفق، بر اساس نقش کاربر (Admin یا User)، کاربر به مسیرهای خاصی هدایت می شود. شما می توانید نقش های بیشتری اضافه کنید و مسیرهای مربوط به آن ها را تنظیم نمایید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 00:01 1398/09/07

برای این منظور یعنی بعد از اینکه کاربر لاگین کرد به یک مسیر مشخص هدایت بشه باید نقش های کاربر یا همون Role ها موقع لاگین کردن مشخص باشه. با توجه به اینکه پروژه شما از نوع asp.net core هست شما باید دقت داشته باشید که در فایل statrtup.cs و در متد configure از میان افزارهای زیر استفاده کرده باشید

 

app.UseAuthentication();
app.UseAuthorization();

 

هدایت کاربر به یک مسیر خاص بعد از لاگین

 

و همچنین به کاربران Role اختصاص داده شده باشه. با فرض اینکه همه این کارها به درستی انجام شده باشه می تونید توی اکشن متد Login دستورات زیر رو بنویسید 

 

  [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Login(LoginViewModel model)
        {
            if (ModelState.IsValid)
            {
                var result = await _signInManager.PasswordSignInAsync(model.username,
model.Password, true, lockoutOnFailure: true);

                if (result.Succeeded)
                {
                    var user = _userManager.Users.Where(item => item.username == model.username).Single();

                    //Success Login
                    var userRole = _userManager.GetRolesAsync(user).Result.Single();
                    return RedirectToLocal(userRole);
                }
                else if (!result.Succeeded)
                {
                    //اگر اطلاعات کاربر اشتباه بود
                    ModelState.AddModelError(string.Empty, "اطلاعات ورودی اشتباه است");
                    return View(model);
                }
            }
            return View(model);
        }

 

در قطعه کد بالا بعد از اینکه کاربر احراز هویت شد نقش کاربر رو بدست میاریم. دقیقا منظورم قطعه کد زیر هست

 

var userRole = _userManager.GetRolesAsync(user).Result.Single();

 

در کد بالا در متغیر userRole نقش کاربر رو نگهداری می کنیم. و در خط بعدی یک متد رو صدا می زنیم که ورودی این متد همون نقش کاربران هست، که با توجه به نقش کاربر کاربر رو به یک مسیر خاص که شما تعیین می کنید هدایت می کنه. این متد به صورت زیر هست

 

      private IActionResult RedirectToLocal(string RoleName)
        {
            if (RoleName == "admin")
            {
                return Redirect("/AdminPanel/adminHome");
            }
            else if (RoleName == "user")
            {
                return Redirect("/UserPanel/userHome");
            }
           
            return null;
        }

 

به این ترتیب شما می تونید بعد از لاگین موفق کاربر با توجه به نقش کاربر هدایت کنید به چه مسیری بره. ضمنا دقت کنید که برای هدایت کاربر به یک مسیر خاص بعد از لاگین از دستور Redirect استفاده شده که شما هم از این دستور استفاده کنید و مسیر مشخص شده هم به صورت Url نوشته شده.

کدهای بالا کاملا تست شده هستن و به درستی در پروژه کار می کنن. برای کسب اطلاعات بیشتر می تونید به این لینک هم مراجعه کنید.

ویرایش شده در پنج شنبه 7 آذر 1398 ساعت 00:02:20
به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود