添加[Authorize]后Blazor Server应用登出报错求助
解决Blazor Server登出后跳转错误问题
问题根源
你在受保护页面(如Account/Manage)点击登出时,将当前受保护页面的URL作为ReturnUrl传递给登出接口。登出完成后,系统尝试跳转到该ReturnUrl,但此时用户已处于未授权状态,触发[Authorize]属性的重定向逻辑,试图跳转到登录页。但实际存在两个核心问题:
- 传递受保护页面作为
ReturnUrl本身不合理,登出后应跳转至允许匿名访问的页面(如首页); - 系统默认跳转的登录页路径(
/Account/Login)可能与你实际的登录页路由不匹配,导致找不到页面。
解决方案
1. 修改登出按钮的ReturnUrl指向匿名页面
将表单中ReturnUrl的@currentUrl替换为首页路径"/",登出后直接跳转至首页,避免触发受保护页面的重定向:
<div class="nav-item px-3"> <form action="Account/Logout" method="post"> <AntiforgeryToken /> <input type="hidden" name="ReturnUrl" value="/" /> <button type="submit" class="nav-link"> <span class="bi bi-arrow-bar-left-nav-menu" aria-hidden="true"></span> Logout </button> </form> </div>
2. 确认登录页路由配置
检查Program.cs中的身份验证配置,确保LoginPath与你的登录页实际路由一致。例如,若登录页路由为/Login,配置如下:
using Microsoft.AspNetCore.Authentication.Cookies; builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Login"; // 替换为你的登录页实际路由 options.LogoutPath = "/Account/Logout"; options.AccessDeniedPath = "/AccessDenied"; });
如果使用ASP.NET Core Identity,需确保添加Razor Pages中间件(Identity的登录、登出等页面基于Razor Pages实现):
app.MapRazorPages();
3. 关于找不到Logout相关文件的说明
Blazor Server默认的登出功能由ASP.NET Core Identity的后端端点处理,没有对应的Blazor组件文件。无需寻找相关文件,直接通过表单提交到Account/Logout接口即可完成登出操作。
内容的提问来源于stack exchange,提问作者William Stephenson
相关产品推荐
相关产品推荐

