.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">
            &copy; 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>
posted @   有诗亦有远方  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示