.NetCore Idetity(二) ------Identity认证服务的使用
.NetCore Idetity(二) ------Identity认证服务的使用
源码链接
链接:https://pan.baidu.com/s/1KWqAovbFxBMS1AxMDnc5xA
提取码:1234
1.创建注册与登录的领域模型
public class LoginViewModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "记住我")]
public bool RememberMe { get; set; }
}
public class RegisterViewModel
{
[Required]
[Display(Name ="邮箱")]
[EmailAddress]
public string Email { get; set; }
[Required]
[Display(Name ="密码")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name ="确认密码")]
[Compare("Password",ErrorMessage ="两次密码不一样")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
}
2.创建AccountController控制器
public class AccountController : Controller
{
private UserManager<IdentityUser> _userManager;
private SignInManager<IdentityUser> _signInManager;
public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
{
this. _userManager = userManager;
this._signInManager = signInManager;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(
model.Email, model.Password, model.RememberMe, false );
if (result.Succeeded)
{
return RedirectToAction("List", "Home");
}
ModelState.AddModelError(string.Empty, "登录失败,请重试");
}
return View(model);
}
public async Task<IActionResult> LoginOut()
{
await _signInManager.SignOutAsync();
return RedirectToAction("index", "home");
}
[HttpGet]
public IActionResult Register ()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel registerViewModel)
{
if(ModelState.IsValid)
{
var user = new IdentityUser
{
UserName = registerViewModel.Email,
Email = registerViewModel.Email
};
var result = await _userManager.CreateAsync(user, registerViewModel.Password);
if(result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
return View(registerViewModel);
}
}
3.添加登录注册视图
1.Login视图
@model LoginViewModel
@{
ViewData["Title"] = "Home Page";
}
<form class="layui-form layui-form-pane " method="post">
<div class="layui-form-item">
<label class="layui-form-label" asp-for="Email"></label>
<div class="layui-input-inline">
<input class="form-control" asp-for="Email">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label" asp-for="Password"></label>
<div class="layui-input-inline">
<input class="form-control" asp-for="Password">
</div>
</div>
<div class="form-group">
<div class="checkbox">
<label asp-for="RememberMe">
<input asp-for="RememberMe" />
@*选择后会使用cookie记住用户信息*@
@Html.DisplayNameFor(m => m.RememberMe)
</label>
</div>
</div>
<div class="layui-form-item" style="margin-left:120px">
<button class="layui-btn" lay-submit="" lay-filter="demo2" type="submit">登录</button>
</div>
</form>
2.Register视图
@model RegisterViewModel
<div class="col-md-8">
<form method="post" >
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Email"></label>
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Password"></label>
<input asp-for="Password" class="form-control" />
<span asp-validation-for="Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="ConfirmPassword"></label>
<input asp-for="ConfirmPassword" class="form-control" />
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">注册</button>
</form>
</div>
3.在_Layout视图中对登录状态的判断
<body>
@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> _singinManager
@if (_singinManager.IsSignedIn(User))
{
<header>
<ul class="layui-nav" lay-filter="">
<li class="layui-nav-item"><a asp-controller="Home" asp-action="Index">首页</a></li>
<li class="layui-nav-item "><a asp-controller="Home" asp-action="Create">添加学生</a></li>
<li class="layui-nav-item "><a asp-controller="Home" asp-action="List">顾客列表</a></li>
<li class="layui-nav-item"><a href="">关于我们</a></li>
<li class="layui-nav-item">
<a href="javascript:;">商品</a>
<dl class="layui-nav-child">
<!-- 二级菜单 -->
<dd><a href="">商品</a></dd>
<dd><a href="">商品</a></dd>
<dd><a href="">商品</a></dd>
</dl>
</li>
<li class="layui-nav-item login-register"><a asp-controller="Account" asp-action="LoginOut">注销</a></li>
<li class="layui-nav-item login-register">@User.Identity.Name</li>
</ul>
</header>
}
else
{
<header>
<ul class="layui-nav" lay-filter="">
<li class="layui-nav-item"><a asp-controller="Home" asp-action="Index">首页</a></li>
<li class="layui-nav-item"><a href="">关于我们</a></li>
<li class="layui-nav-item login-register"><a asp-controller="Account" asp-action="Login">登录</a></li>
<li class="layui-nav-item login-register"><a asp-controller="Account" asp-action="Register">注册</a></li>
</ul>
</header>
}
<div class="col-md-12 container" style="padding: 0; margin: 0; height:650px;">
@RenderBody()
</div>
<footer class="border-top footer text-muted" style="margin-bottom:0px;">
<div class="container" style="border-top:1px outset">
© 2021 - WebApplication123 - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
</div>
</footer>
<script src="//unpkg.com/layui@2.6.8/dist/layui.js"></script>
</body>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律