AuthenticationStateProvider是Blazor中广播用户认证状态的核心服务,需继承并重写GetAuthenticationStateAsync(),调用NotifyAuthenticationStateChanged通知UI更新,注册为Scoped(Server)或Singleton(WASM),配合CascadingAuthenticationState使用。
Blazor 的 AuthenticationStateProvider 是实现自定义身份验证逻辑的核心组件,它负责向整个应用提供当前用户的认证状态(比如是否已登录、用户身份信息等)。默认情况下,Blazor Server 和 Blazor WebAssembly 的基础模板已集成 Identity 或 JWT 认证,但若需对接自有登录系统、Token 存储在 localStorage、或需要手动触发状态刷新,你就得自定义一个 AuthenticationStateProvider。
它不是“做登录”的工具,而是“广播登录状态”的服务。Blazor 组件(如 AuthorizeView、AuthorizeRouteView)会订阅它的状态变更,从而动态显示/隐藏内容或跳转路由。它内部维护一个 Task,并通过 NotifyAuthenticationStateChanged 方法通知所有监听者状态已更新。
关键点:
AuthenticationStateProvider 的消费者(如 CascadingAuthenticationState)注册GetAuthenticationStateAsync() 返回当前状态(同步或异步获取用户信息)NotifyAuthenticationStateChanged(Task) 才能触发 UI 更新适用于 JWT 登录后把 token 存在浏览器 localStorage,页面刷新后仍需恢复登录态的场景。
步骤如下:
AuthenticationStateProvider,例如 CustomAuthStateProvider
IJSRuntime 用于读取 localStorage 中的 tokenGetAuthenticationStateAsync() 中解析 token(可用 System.IdentityModel.Tokens.Jwt 解码,或简单检查是否存在)并构造 ClaimsPrincipal
MarkUserAsAuthenticated(string token) 方法,保存 token 并通知状态变更Logout() 方法,清除 token 并通知未登录状态注意:WebAssembly 中无法直接访问 HttpContext,所以不能依赖服务端 Session;token 过期校验建议在每次请求前由 HttpClient
拦截器处理,而非全靠 Provider。
别在登录成功后只改内部字段就完事——UI 不会响应。必须调用 NotifyAuthenticationStateChanged。
常见错误写法:
❌ this._currentUser = new ClaimsPrincipal(identity); // 不会刷新 UI正确做法:
AuthenticationState 实例(含新 ClaimsPrincipal)NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(principal)))
确保 App.razor 中已包裹 CascadingAuthenticationState:
Not found Sorry, there's nothing at this address.
之后你就能在任意组件中使用:
... 根据角色/策略切换内容@attribute [Authorize] 控制页面访问权限@inject AuthenticationStateProvider AuthStateProvider 手动获取当前状态(不推荐频繁调用,优先用 AuthorizeView)基本上就这些。不复杂但容易忽略 Notify 通知和生命周期注册时机,踩坑多在这两处。
# js
# go
# cad
# 浏览器
# app
# 工具
# session
# ai
# 路由
# gate
# String
相关文章:
如何高效配置香港服务器实现快速建站?
已有域名如何快速搭建专属网站?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
购物网站制作公司有哪些,哪个购物网站比较好?
如何在香港免费服务器上快速搭建网站?
如何通过网站建站时间优化SEO与用户体验?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何选择域名并搭建高效网站?
网站代码制作软件有哪些,如何生成自己网站的代码?
网站按钮制作软件,如何实现网页中按钮的自动点击?
C#如何在一个XML文件中查找并替换文本内容
定制建站模板如何实现SEO优化与智能系统配置?18字教程
如何零成本快速生成个人自助网站?
如何在七牛云存储上搭建网站并设置自定义域名?
制作网站的公司有哪些,做一个公司网站要多少钱?
电商网站制作价格怎么算,网上拍卖流程以及规则?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
建站主机是什么?如何选择适合的建站主机?
如何在搬瓦工VPS快速搭建网站?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何用狗爹虚拟主机快速搭建网站?
建站之星官网登录失败?如何快速解决?
网站制作壁纸教程视频,电脑壁纸网站?
,制作一个手机app网站要多少钱?
平台云上自助建站如何快速打造专业网站?
linux top下的 minerd 木马清除方法
如何在宝塔面板创建新站点?
广州商城建站系统开发成本与周期如何控制?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
建站之星如何修改网站生成路径?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何快速搭建虚拟主机网站?新手必看指南
网页设计与网站制作内容,怎样注册网站?
学校建站服务器如何选型才能满足性能需求?
如何使用Golang安装API文档生成工具_快速生成接口文档
怀化网站制作公司,怀化新生儿上户网上办理流程?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
三星网站视频制作教程下载,三星w23网页如何全屏?
PHP正则匹配日期和时间(时间戳转换)的实例代码
高性能网站服务器配置指南:安全稳定与高效建站核心方案
公司网站设计制作厂家,怎么创建自己的一个网站?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星如何助力网站排名飙升?揭秘高效技巧
建站主机CVM配置优化、SEO策略与性能提升指南
如何用好域名打造高点击率的自主建站?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。