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