.NET 8 Blazor Web App(独立账户)开箱即用密码重置时出现防伪造令牌错误
.NET 8 Blazor Web App(独立账户)开箱即用密码重置时出现防伪造令牌错误
我完全懂你的困惑——开箱即用的官方模板居然出这种问题,真的会让人怀疑是不是自己操作错了!我之前也碰到过类似的情况,这其实是.NET 8 Blazor Web App模板里中间件顺序的一个小bug,不用纠结,调整下Program.cs里的中间件配置就能解决。
具体解决步骤:
- 打开项目里的
Program.cs文件,找到var app = builder.Build();这段代码之后的中间件配置部分 - 在
app.UseAuthorization();之后,显式添加app.UseAntiforgery();这一行,调整后的代码示例如下:
var app = builder.Build(); // 保留原有的中间件配置,比如: app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 新增这一行,确保防伪造中间件在授权之后执行 app.UseAntiforgery(); // 下面是原有的Razor组件映射代码 app.MapRazorComponents<App>() .AddInteractiveServerRenderMode() .AddInteractiveWebAssemblyRenderMode() .AddAdditionalAssemblies(typeof(Counter).Assembly);
为什么这个方法有效?
在.NET 8的Blazor Web App模板里,原来的UseAuthentication中间件被封装到builder.Services.AddAuthentication().AddIdentityCookies()里了(独立账户模板默认会自动添加这个),虽然你看不到显式的UseAuthentication调用,但相关的认证中间件已经被隐含加入到请求管道中。而防伪造中间件需要在认证、授权中间件之后执行,才能正确关联用户的认证状态来验证令牌,模板默认的自动添加逻辑顺序不对,才导致密码重置的POST请求无法通过防伪造验证。
如果调整中间件顺序后还是有问题,你可以检查下密码重置页面(ResetPassword.razor)的渲染模式:确保页面是交互式渲染的(比如在页面顶部加上@rendermode InteractiveServer),因为静态渲染的页面可能无法正确生成和传递防伪造令牌。不过默认模板的页面应该已经配置了正确的渲染模式,所以优先试中间件顺序的调整就好。
这个确实是模板的小问题,真不是你操作错了,很多开发者都遇到过,按上面的步骤调整后应该就能正常完成密码重置了。
备注:内容来源于stack exchange,提问作者niico
相关产品推荐
相关产品推荐

