ASP.NET CORE[练习7]-Identity-用户登录、最简单的登录验证
练习+博客,量化自己的进步!
做好了用户的添加和编辑后,就可以做一个用户登录!
在这里在注意一下.net core的身份校验的类:
UserManager 管理用户的添加、修改、查找
UserManager.FindByNameAsync() 根据用户账号查找用户
SignInManager 用户的登入登出操作类
SignInManager.PasswordSignInAsync() 根据用户信息和密码判断是否正确,且登入
SignInManager.SignOutAsync() 登出
SignInManager.IsSignedIn(User) 判断是否是登入状态
1.用户登录
2.最简单的登录验证
1.用户登录
1.添加一个AccountController,Action有登录页面、登录提交以及登出。
public class AccountController : Controller { private readonly UserManager<ApplicationUser> userManager; private readonly SignInManager<ApplicationUser> signInManager; public AccountController(UserManager<ApplicationUser> userManager,SignInManager<ApplicationUser> signInManager) { this.userManager = userManager; this.signInManager = signInManager; } public IActionResult Login() { return View(); } [HttpPost] public async Task<IActionResult> Login(LoginViewModel vm) { if (!ModelState.IsValid) { ModelState.AddModelError(string.Empty, "登录异常!"); return View(); } var user = await userManager.FindByNameAsync(vm.UserName); if (user == null) { ModelState.AddModelError(string.Empty, "用户不存在!"); return View(); } // 后面的两个参数,一个是是否应用到浏览器Cookie,一个是登录失败是否锁定账户。 var result = await signInManager.PasswordSignInAsync(user, vm.PassWord,false,false); if (result.Succeeded) { return RedirectToAction("Index", "Home"); } ModelState.AddModelError(string.Empty, "账户或密码不正确"); return View(vm); } //登出,并且跳转到登录页面 public async Task<IActionResult> LogOut() { await signInManager.SignOutAsync(); return RedirectToAction(nameof(Login)); } }
UserManager、SignInManager是.net core内置的服务类,ApplicationUser实体类是自定义的类,继承了IndentityUser类。
2.添加一个LoginViewModel
public class LoginViewModel { [Required,Display(Name ="账号")] public string UserName { get; set; } [Required, Display(Name = "密码")] public string PassWord { get; set; } }
3.登录视图页面
@model LoginViewModel @{ ViewData["Title"] = "Login"; } <h1>用户登录</h1> <form role="form" method="post" asp-action="Login"> <div class="form-group row"> <label class="col-sm-2 col-form-label" asp-for="UserName"></label> <div class="col-sm-10"> <input type="text" asp-for="UserName" /> </div> <span asp-validation-for="UserName"></span> </div> <div class="form-group row"> <label class="col-sm-2 col-form-label" asp-for="PassWord"></label> <div class="col-sm-10"> <input type="text" asp-for="PassWord" /> </div> <span asp-validation-for="PassWord"></span> </div> <button type="submit">登录</button> </form>
4.登录状态
登录已经做好了,但要在导航栏上展示登录状态,以及登录、登出的按钮。
需要建立一个部分视图_LoginPartial.cshtml
@using Microsoft.AspNetCore.Identity @inject SignInManager<ApplicationUser> signInManager @inject UserManager<ApplicationUser> userManager <ul class="navbar-nav"> @if (signInManager.IsSignedIn(User)) { <li class="nav-item"> <a class="nav-link text-dark">Hello @User.Identity.Name !</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Account" asp-action="LogOut">Logout</a> </li> } else { @*<li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Account/Register">Register</a> </li>*@ <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-controller="Account" asp-action="Login">Login</a> </li> } </ul>
SignInManager、UserManager两个服务类要在视图页面中引入。
signInManager.IsSignedIn(User) 判断用户是否登录。
@User.Identity.Name 展示用户信息。
效果图:
未登录状态,点击Login跳转到登录页面。
已登录状态,Hello swk ! 是一个状态显示已登录,点击Logout登出并跳转到登录页面。
5.其实,在之前四步就应该做的一步是启用身份验证功能。
starup.cs类的Configure方法中启用,身份验证功能。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); 3ff8 } app.UseStaticFiles(); app.UseCookiePolicy(); app.UseAuthentication(); // 启用身份验证 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
2.最简单登录验证
网站或系统必须是登录才能访问的:
[Authorize] public class HomeController : Controller { [Authorize] public IActionResult Index() { return View(); } // 略……
Authorize添加到Controller上,使Controller上的Action都需要登录才能访问。
Authorize添加到Action上,使此Action登录才能访问。
效果演示:
未登录,点击Home会自动跳转到登录页面。
同样是未登录,但Student并没有添加登录验证,所以可以访问。
总结
这一套登录验证都是基于.net core内置身份验证做的,很多详细功能可以参考官方文档。目前做的练习在博客中写的都很详细,直接复制粘贴都能运行。
- ASP.NET Core中实现用户登录验证的最低配置示例代码
- ASP.NET jQuery 食谱11 (通过使用jQuery validation插件简单实现用户登录页面验证功能)
- ASP.NET Core 打造一个简单的图书馆管理系统 (修正版)(二)用户数据库初始化、基本登录页面以及授权逻辑的建立
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
- asp.net获取session进行简单的用户登录验证。
- ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
- ASP.NET CORE[练习8]-Identity-用户角色、给用户分配角色、角色校验
- ASP.NET Core 实现用户登录验证的最低配置
- ASP.NET Core的身份认证框架IdentityServer4--(5)自定义用户登录(使用官网提供的UI)
- asp.net js检测登录超时验证用户状态
- Asp.Net Core 项目实战之权限管理系统(5) 用户登录
- ASP.NET中使用自定义类实现统一管理页面用户登录验证功能
- Asp.Net使用加密cookie代替session验证用户登录状态 源码分享 欢迎拍砖
- 使用Asp.net Identity 创建用户 、登录代码
- ASP.NET CORE[练习10]-Identity-自定义Policy
- Asp.net防止用户多次登录的最简单的方法
- ASP.NET Core 2.0 MVC - 获取当前登录用户信息
- 坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)
- ASP.NET jQuery 食谱12 (通过使用jQuery validation插件简单实现用户注册页面验证功能)
- asp.net用户登录 用户验证