要在ASP.NET Core Razor Pages中成功登录后使用Cookie身份验证并重定向到登录页面,可以按照以下步骤进行操作:
Startup.cs文件中启用身份验证和Cookie中间件。在ConfigureServices方法中添加以下代码:services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Login"; // 登录页面的路由
});
Configure方法中添加身份验证中间件:app.UseAuthentication();
创建一个登录页面(例如Login.cshtml),其中包含用户名和密码输入字段以及提交按钮。
创建一个处理登录的处理程序(例如Login.cshtml.cs),在该处理程序中验证用户的凭据,并在验证成功时创建并签发Cookie。示例代码如下:
public class LoginModel : PageModel
{
private readonly SignInManager _signInManager;
public LoginModel(SignInManager signInManager)
{
_signInManager = signInManager;
}
[BindProperty]
public LoginInputModel Input { get; set; }
public void OnGet()
{
}
public async Task OnPostAsync()
{
if (ModelState.IsValid)
{
var result = await _signInManager.PasswordSignInAsync(Input.Username, Input.Password, false, lockoutOnFailure: false);
if (result.Succeeded)
{
return RedirectToPage("/Index"); // 登录成功后重定向到主页
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
return Page();
}
}
ConfigureServices方法中注册用户管理和登录管理服务。示例代码如下:services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.ConfigureApplicationCookie(options =>
{
options.Cookie.Name = "YourCookieName";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.LoginPath = "/Login";
options.AccessDeniedPath = "/AccessDenied";
options.SlidingExpiration = true;
});
以上代码中的ApplicationUser是自定义的用户模型,ApplicationDbContext是应用程序的数据库上下文。
这样,当用户成功登录后,将创建一个身份验证Cookie,并将用户重定向到主页或其他指定页面。如果登录失败,用户将保留在登录页面并收到相应的错误消息。