.Net Core — Cookie 身份验证

目录

[步骤 1:创建登录视图模型](#步骤 1:创建登录视图模型)

[步骤 2:创建视图](#步骤 2:创建视图)

[步骤 3:更新 _Layout(用于导航栏)](#步骤 3:更新 _Layout(用于导航栏))

[步骤 4:更新控制器](#步骤 4:更新控制器)

[步骤 5:更新 Program.cs](#步骤 5:更新 Program.cs)

[补充说明:在其他课程中使用 cookie](#补充说明:在其他课程中使用 cookie)


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

在本教程中,我们将学习如何使用 cookie 在我们的应用程序中进行身份验证。

步骤 1:创建登录视图模型

using System.ComponentModel.DataAnnotations;

namespace BlogApp.Models {

public class LoginViewModel {

Required

EmailAddress

Display(Name = "Email" )

public string? Email { get ; set ; }

Required

DataType(DataType.Password)

Display(Name = "Password" )

public string? Password { get ; set ; }

}

}

步骤 2:创建视图

@model LoginViewModel

<div class="row">

<div class="col-12">

<div class="bg-white p-4">

<h1>Login</h1>

<form asp-controller="User" asp-action="Login" method="post">

<div asp-validation-summary="ModelOnly" class="text-danger"></div>

<div class="mb-3">

<label asp-for="Email" class="form-label"></label>

<input asp-for="Email" class="form-control">

<span asp-validation-for="Email" class="text-danger"></span>

</div>

<div class="mb-3">

<label asp-for="Password" class="form-label"></label>

<input asp-for="Password" class="form-control">

<span asp-validation-for="Password" class="text-danger"></span>

</div>

<button type="submit" class="btn btn-primary">Login</button>

</form>

</div>

</div>

</div>

步骤 3:更新 _Layout(用于导航栏)

<ul class="navbar-nav ms-auto">

@if(User.Identity!.IsAuthenticated){

<li class="nav-item">

<a href="#" class="nav-link">@User.Identity.Name</a>

</li>

<li class="nav-item">

<a href="/logout" class="nav-link">Logout</a>

</li>

}

else{

<li class="nav-item">

<a href="/login" class="nav-link">Login</a>

</li>

}

</ul>

步骤 4:更新控制器

HttpPost

public async Task<IActionResult> Login(LoginViewModel model){

try{

if(!ModelState.IsValid){

ModelState.AddModelError("", "Invalid Credentials");

return View(model);

}

var user = _userRepository.Users.FirstOrDefault(o => o.Email == model.Email && o.Password == model.Password);

if(user == null){

ModelState.AddModelError("", "Invalid Credentials");

return View(model);

}

// COOKIE

var claims = new List<Claim>();

claims.Add(new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()));

claims.Add(new Claim(ClaimTypes.Name, user.UserName ?? ""));

claims.Add(new Claim(ClaimTypes.GivenName, user.Name ?? ""));

claims.Add(new Claim(ClaimTypes.Role, "User"));

var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);

await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); // delete old cookie if exist

await HttpContext.SignInAsync( // add new cookie

CookieAuthenticationDefaults.AuthenticationScheme,

new ClaimsPrincipal(claimsIdentity),

new AuthenticationProperties{IsPersistent = true} // remember me

);

return RedirectToAction("Index", "Post");

}

catch(Exception e){

ModelState.AddModelError("", e.Message);

return View(model);

}

}

步骤 5:更新 Program.cs

// Cookie Authentication

builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();

...

// Authentication & Authorization

app.UseRouting();

app.UseAuthentication();

app.UseAuthorization();

var claims = User.Claims;

...

var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

var userName = User.FindFirstValue(ClaimTypes.Name);

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
csdn_aspnet7 小时前
在 ASP.NET Core 中实现 Cookie 身份验证
后端·asp.net·.netcore·cookie
杨大枫2 天前
.Net Core 3.1|8.0 回调Minio WebHook事件进行数据同步
.netcore·minio
吹牛不交税2 天前
admin.net框架使用记录
vue·.netcore
捧 花6 天前
HTTP的补充
http·cookie·session·http缓存·工作流程
weixin_421994786 天前
更复杂的结构 - 类与对象
.net·.netcore
想起你的日子8 天前
ASP.NET Core EFCore之DB First
数据库·.netcore
想起你的日子8 天前
EFCore之Code First
前端·.netcore
梦茹^_^9 天前
flask框架(笔记一次性写完)
redis·python·flask·cookie·session
1314lay_10079 天前
.NET 7.0在.NET Core Web API中实现限流
.net·.netcore