欢迎光临
我们一直在努力

.Net Core — Cookie 身份验证

目录

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

步骤 2:创建视图

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

步骤 4:更新控制器

步骤 5:更新 Program.cs

补充说明:在其他课程中使用 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();

补充说明:在其他课程中使用 cookie

var claims = User.Claims; … var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var userName = User.FindFirstValue(ClaimTypes.Name);

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

赞(0)
未经允许不得转载:171主机测评 » .Net Core — Cookie 身份验证
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址