• Asp.Net Core Web MVC简单Cookie登录验证


    1、新建Asp.Net Core Web MVC项目

    2、项目目录结构

     3、修改launchSettings.json

    {
     
      "profiles": {
       
        "WebApplication1": {
          "commandName": "Project",
          "dotnetRunMessages": "true",
          "launchBrowser": true,
          "applicationUrl": "http://localhost:5000",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        }
      }
    }

    4、添加User.cs

      public class User
        {
            public string Name { get; set; }
    
    
            public string Password { get; set; }
        }

    5、添加UserServer.cs

       public class UserServer
        {
            private List<User> users;
            public List<User> Users 
            {
                get { return users; }
            }
    
            public UserServer()
            {
                users = new List<User>()
                {
                 new User(){ Name="qqqq",Password="123"},
                  new User(){ Name="wwww",Password="123"},
                   new User(){ Name="eeee",Password="123"},
                    new User(){ Name="rrrr",Password="123"},
                };
            }
    
        }

    6、Views文件夹下添加Login文件夹,添加Index.cshtml,Deny.cshtml

    @{
        ViewData["Title"] = "登录页面";
    }
    
    
    <div>
        请登录!
    </div>
    
    @using (Html.BeginForm("Login", "Login", FormMethod.Post))
    {
        <div>
            <label> 用户名:</label>
            <input name="UserName" type="text" placeholder="请输入用户名" />
        </div>
        <div>
            <label>密码:</label>
            <input name="Password" type="password" />
        </div>
        <div>
            <input type="submit" value="登录" />
        </div>
    }
    <div>
        @ViewBag.Msg
    </div>
    @{ 
        ViewData["Title"] = "未授权";
    }
    
    <div>
        未授权
    </div>

    7、添加LoginController.cs

      public class LoginController : Controller
        {
            UserServer userServer = new UserServer();
            public IActionResult Index()
            {
                return View();
            }
    
            public async Task<IActionResult> Login()
            {
                var userName = Request.Form["UserName"];
                var password = Request.Form["Password"];
                var item = userServer.Users.Find(_ => _.Name == userName);
                if (item != null && password == item.Password)
                {
                    //用Claim来构造一个ClaimsIdentity,然后调用 SignInAsync 方法。
                    var claims = new List<Claim>();
                    claims.Add(new Claim(ClaimTypes.Name, userName));
                    var claimsIdentity = new ClaimsIdentity(claims, "myCookies");
                    //登录
                    await HttpContext.SignInAsync("myCookies", new ClaimsPrincipal(claimsIdentity));
                    return RedirectToAction("Privacy", "Home");
                }
                else
                    ViewBag.Msg = "登陆失败";
                return View("Index");
            }
            public async Task<IActionResult> Logout()
            {
                //退出
                await HttpContext.SignOutAsync("myCookies");
                return RedirectToAction("Index", "Home");
    
            }
    
            public IActionResult Deny()
            {
                return View();
            }
        }

    8、修改_Layout.cshtml

       <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                        <ul class="navbar-nav flex-grow-1">
                            <li class="nav-item">
                                <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
                            </li>
                            <li class="nav-item">
                                <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
                            </li>
                            @if (User.Identity.IsAuthenticated)
                            {
                            <li class="nav-item">
                                <a class="nav-link text-dark" asp-area="" asp-controller="Login" asp-action="Logout">退出</a>
                            </li>
                            }
                        </ul>
                    </div>

    9、修改Startup.cs

    public class Startup
        {
            private const string cookieScheme = "myCookies";
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllersWithViews();
                services.AddAuthentication(cookieScheme)
            .AddCookie(cookieScheme, option =>
            {
                option.LoginPath = new PathString("/login/index");
                option.AccessDeniedPath = new PathString("/login/deny");
            });
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }
                app.UseStaticFiles();
    
                app.UseRouting();
    
                app.UseAuthentication();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllerRoute(
                        name: "default",
                        pattern: "{controller=Home}/{action=Index}/{id?}");
                });
            }
        }
  • 相关阅读:
    [爬虫资源]各大爬虫资源大汇总,做我们自己的awesome系列
    [Nancy On .Net Core Docker] 轻量级的web框架
    2015,平凡之路
    转[开发环境配置]在Ubuntu下配置舒服的Python开发环境
    转自coolshell--vim的基本操作
    [python基础]关于包,类,模块的那些事儿
    [python IDE] 舒服的pycharm设置
    [python基础]关于中文编码和解码那点事儿
    [python基础]关于装饰器
    小白也能看懂的插件化DroidPlugin原理(三)-- 如何拦截startActivity方法
  • 原文地址:https://www.cnblogs.com/lhwpc/p/15194674.html
Copyright © 2020-2023  润新知