一、建立LoginViewModel視圖模型
using System.ComponentModel.DataAnnotations; namespace Shop.ViewModel { public class LoginViewModel { [Required] [Display(Name = "用戶名")] public string Name { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "密碼")] public string Password { get; set; } } }
二、登錄方法
public IActionResult Login() { return View(); }
三、登錄頁面
@model Shop.ViewModel.LoginViewModel @{ ViewData["Title"] = "Login"; } <h1>Login</h1> <form class="form-horizontal" asp-action="Login" method="post"> <fieldset> <div class="control-group"> <label class="control-label">用戶名</label> <div class="controls"> <input type="text" placeholder="" class="input-xlarge" asp-for="Name"> </div> </div> <div class="control-group"> <label class="control-label">密碼</label> <div class="controls"> <input type="text" placeholder="" class="input-xlarge" asp-for="Password"> </div> </div> <input type="submit" class="btn btn-primary" value="登錄"/> </fieldset> </form>
四、登錄實現
[HttpPost] public async Task<IActionResult> Login(LoginViewModel input) { if (!ModelState.IsValid) { return View(input); } var user = await _userManager.FindByNameAsync(input.Name); if (user != null) { var result = await _signInManager.PasswordSignInAsync(user, input.Password, false, false); if (result.Succeeded) { return RedirectToAction("Index"); } } ModelState.AddModelError("", "用戶名或密碼錯誤"); return View(input); }
五、注銷
[HttpPost] public async Task<IActionResult> Logout() { await _signInManager.SignOutAsync(); return RedirectToAction("Index", "Home"); }
六、新建用戶后不能直接登錄,因為在Startup.cs類中定義了用戶需要確認后才能登錄,配置代碼如下
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>();
因現在學習原理為主,自己增加用戶后先在數據庫(AspNetUsers)手工修改確認或者將上述需要驗證設置為false,驗證方式如下最好參考官方多重身份驗證
- RequireConfirmedAccount 賬戶確認
- RequireConfirmedEmail 郵件確認
- RequireConfirmedPhoneNumber 電話確認