在ASP.NET Core中,使用Identity框架来实现基本的登录系统是非常简单的,但可能会给初学者带来一些困扰。以下是一个简单的解决方案,包含代码示例:
using Microsoft.AspNetCore.Identity;
public void ConfigureServices(IServiceCollection services)
{
// 添加Identity服务
services.AddIdentity()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores();
// 其他配置...
}
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// 其他配置...
// 启用Identity中间件
app.UseAuthentication();
// 其他配置...
}
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
public class AccountController : Controller
{
private readonly SignInManager _signInManager;
private readonly UserManager _userManager;
public AccountController(
SignInManager signInManager,
UserManager userManager
)
{
_signInManager = signInManager;
_userManager = userManager;
}
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, false);
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
ModelState.AddModelError("", "无效的登录尝试.");
}
}
return View(model);
}
[HttpGet]
public IActionResult Register()
{
return View();
}
[HttpPost]
public async Task Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = model.Email, Email = model.Email };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
await _signInManager.SignInAsync(user, isPersistent: false);
return RedirectToAction("Index", "Home");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
}
return View(model);
}
}
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]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配.")]
[Display(Name = "确认密码")]
public string ConfirmPassword { get; set; }
}
这样,你就可以通过访问Account/Login和Account/Register来访问登录和注册页面,并通过输入合法的用户凭据来登录和注册用户。