在asp.net Core中,实现验证和授权是一个非常基本的任务。使用asp.net Core身份验证,我们可以非常轻松地对应用程序实施控制访问机制。本文将介绍如何在ASP.NET Core应用程序中使用身份验证来登录用户并将其重定向到Admin页面。
首先,我们需要在ASP.NET Core应用程序中安装以下NuGet包:
接下来,在Startup.cs文件中进行以下配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.LoginPath = "/Account/Login"; // 自定义登录页面路径
options.AccessDeniedPath = "/Account/AccessDenied"; // 自定义访问被拒绝页面路径
options.SlidingExpiration = true;
});
services.AddMvc();
}
在Configure方法中添加以下代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
接下来,在AccountController中添加以下代码:
public class AccountController : Controller
{
private readonly UserManager _userManager;
private readonly SignInManager _signInManager;
public AccountController(
UserManager userManager,
SignInManager signInManager)
{
_userManager = userManager;
_signInManager = signInManager;
}
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task Login(LoginViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(LoginWith2fa), new { returnUrl, model.RememberMe });