下面是.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!!!!!!