目录
步骤 1:创建登录视图模型
步骤 2:创建视图
步骤 3:更新 _Layout(用于导航栏)
步骤 4:更新控制器
步骤 5:更新 Program.cs

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
在本教程中,我们将学习如何使用 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();
补充说明:在其他课程中使用 cookie
var claims = User.Claims; … var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var userName = User.FindFirstValue(ClaimTypes.Name);
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。