zoukankan      html  css  js  c++  java
  • asp.net core 基于角色的认证登陆

    一、登陆页面的Controller

    [Authorize(Roles = "Admin,SuperAdmin")]
    public class ManageController : Controller
        {
            public IActionResult Index()
            {
                return View();
            }
    
    
            [AllowAnonymous]
            public IActionResult Login(string returnUrl = null)
            {
                _logger.LogInformation("进入登录页面");
                TempData["returnUrl"] = returnUrl;
                ViewBag.Msg = " ";
                return View();
            }
    
    
            [AllowAnonymous]
            [HttpPost]
            public async Task<IActionResult> LoginCheck(string name, string password, string returnUrl)
            {
                string loginName = Filter.FilterHTML(name);
                var account = await _context.Account.FirstOrDefaultAsync(g => g.LoginName.Equals(loginName));
                if (account == null || (!account.Password.Equals(password)))
                {
                    ViewBag.Msg = "账号或密码有误,请重新输入";
                    return View("Index");
                }
                else
                {
                    var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
                    identity.AddClaim(new Claim(ClaimTypes.Sid, account.Id.ToString()));
                    identity.AddClaim(new Claim(ClaimTypes.Name, account.Name));
                    identity.AddClaim(new Claim(ClaimTypes.Role, account.Role));
                    await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity), new AuthenticationProperties
                    {
                        IsPersistent = true,
                        ExpiresUtc = DateTime.Now.AddDays(1)
                    });
    
    
    
                    if (returnUrl == null)
                    {
                        returnUrl = TempData["returnUrl"]?.ToString();
                    }
                    if (returnUrl != null)
                    {
                        return LocalRedirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction(nameof(HomeController.Index), "Manage");
                    }
                }
            }
    
    
            [HttpGet]
            public async Task<IActionResult> Logout()
            {
                await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
                return RedirectToAction("login");
            }
    
            [AllowAnonymous]
            public IActionResult Denied()
            {
                return View();
            }
        }
    

      二、配置Startup.cs的ConfigureServices方法,增加如下代码

                //配置使用Authorize登陆认证
                services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                      .AddCookie(options =>
                      {
                          options.LoginPath = new PathString("/manage/login");
                          options.AccessDeniedPath = new PathString("/manage/denied");
                      }); 
    

      三、配置Startup.cs的Configure方法,增加如下代码

    app.UseAuthentication();//配置使用Authorize登陆认证
    

      

  • 相关阅读:
    SCILAB简介[z]
    UG OPEN API编程基础 2约定及编程初步
    Office 2003与Office 2010不能共存的解决方案
    UG OPEN API 编程基础 3用户界面接口
    NewtonRaphson method
    UG OPEN API编程基础 13MenuScript应用
    UG OPEN API编程基础 14API、UIStyler及MenuScript联合开发
    UG OPEN API编程基础 4部件文件的相关操作
    UG OPEN API编程基础 1概述
    16 UG Open的MFC应用
  • 原文地址:https://www.cnblogs.com/fireicesion/p/10706326.html
Copyright © 2011-2022 走看看