.net Core 用户登入身份验证简单的demo

下面是.net Core Startup文件的配置信息,关注标红的地方

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
 
namespace Demo
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            //添加 身份验证 服务
            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).
             AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>
             {
                 o.LoginPath = new PathString("/Home/Login");
             });
        }
 
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
 
            //路由设置默认起始为  指定的Hmoe/Center
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Center}");
            });
            //使用身份验证服务
            app.UseAuthentication();
        }
    }
}

  以下是 控制器代码,关注标红的地方

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
 
namespace Demo.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Login()
        {
            return Content("Login");
        }
        public IActionResult DoLogin()
        {
            /*
             * 记录cookie之前要对用户的帐号和密码进行验证
             * 如果验证成功则把id和用户名记入 cookie
             * (帐号和密码验证要查询数据库 我在这里就没有去处理,下面默认是验证通过后的代码)
             * 登录以后获取token,
             * 获取传递的token,去用户信息
             * 
             */
            string token = "123456";
            string name = "狼来了";
            ClaimsIdentity identity = new ClaimsIdentity("Forms");
 
            identity.AddClaim(new Claim(ClaimTypes.Sid, token));
            identity.AddClaim(new Claim(ClaimTypes.Name, name));
 
            ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(identity);
            HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
 
            return Content("登录成功!!");
        }
 
        /// <summary>
        /// 用户进入内容的之前 先去用户信息进行验证
        /// 如果验证不通过则进入 Home/Login 这个是在添加服务配置时添加的
        /// </summary>
        /// <returns></returns>
        [Authorize(AuthenticationSchemes = CookieAuthenticationDefaults.AuthenticationScheme)]
        public IActionResult Center()
        {
             string sid= User.FindFirstValue(ClaimTypes.Sid);//获取ID
             string mane= User.FindFirstValue(ClaimTypes.Name);//获取用户名
             return Content("Center");
        }
        public IActionResult Logout()
        {
           HttpContext.SignOutAsync().Wait();//注销
           return Content("退出成功!!");
        }
    }
}

  So easy!!!!!!

原文地址:https://www.cnblogs.com/wolfocme110/p/13586762.html