在标准Blazor模板中,身份验证页面在InteractiveServer渲染模式下无限循环可能是由于在登录失败时发生了重定向引起的。要解决这个问题,可以在登录失败时不进行重定向,而是显示错误消息。
以下是一个解决方法的代码示例:
LoginDisplay.razor
文件,找到LoginMenu
组件,并修改如下:
Hello, @context.User.Identity.Name!
Logout
Register
Login
Login.cshtml.cs
文件,找到OnPostAsync
方法,并修改如下:public async Task OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
ExternalLogins = (await signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
var result = await signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);
if (result.Succeeded)
{
return LocalRedirect(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
}
}
// If we got this far, something failed, redisplay form
return Page();
}
通过以上修改,当登录失败时,不再进行重定向,而是在页面上显示"Invalid login attempt."错误消息。这样就避免了在InteractiveServer渲染模式下的无限循环问题。
上一篇:标注路线并扩展现有方法内部