全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Blazor AuthenticationStateProvider 使用教程

AuthenticationStateProvider是Blazor中广播用户认证状态的核心服务,需继承并重写GetAuthenticationStateAsync(),调用NotifyAuthenticationStateChanged通知UI更新,注册为Scoped(Server)或Singleton(WASM),配合CascadingAuthenticationState使用。

Blazor 的 AuthenticationStateProvider 是实现自定义身份验证逻辑的核心组件,它负责向整个应用提供当前用户的认证状态(比如是否已登录、用户身份信息等)。默认情况下,Blazor Server 和 Blazor WebAssembly 的基础模板已集成 Identity 或 JWT 认证,但若需对接自有登录系统、Token 存储在 localStorage、或需要手动触发状态刷新,你就得自定义一个 AuthenticationStateProvider

理解 AuthenticationStateProvider 的作用

它不是“做登录”的工具,而是“广播登录状态”的服务。Blazor 组件(如 AuthorizeViewAuthorizeRouteView)会订阅它的状态变更,从而动态显示/隐藏内容或跳转路由。它内部维护一个 Task,并通过 NotifyAuthenticationStateChanged 方法通知所有监听者状态已更新。

关键点:

  • 必须注册为 Scoped(Blazor Server)或 Singleton(Blazor WebAssembly),且早于 AuthenticationStateProvider 的消费者(如 CascadingAuthenticationState)注册
  • 重写 GetAuthenticationStateAsync() 返回当前状态(同步或异步获取用户信息)
  • 调用 NotifyAuthenticationStateChanged(Task) 才能触发 UI 更新

手写一个基于 localStorage 的 Provider(WebAssembly 场景)

适用于 JWT 登录后把 token 存在浏览器 localStorage,页面刷新后仍需恢复登录态的场景。

步骤如下:

  • 新建类继承 AuthenticationStateProvider,例如 CustomAuthStateProvider
  • 注入 IJSRuntime 用于读取 localStorage 中的 token
  • GetAuthenticationStateAsync() 中解析 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)))
  • 如果操作是异步的(如从 API 获取用户信息),可直接返回该异步 Task

与路由和组件配合使用

确保 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小时内与您取得联系。