新闻中心
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 组件(如 AuthorizeView、AuthorizeRouteView)会订阅它的状态变更,从而动态显示/隐藏内容或跳转路由。它内部维护一个 Task<authenticationstate></authenticationstate>,并通过 NotifyAuthenticationStateChanged 方法通知所有监听者状态已更新。
关键点:
- 必须注册为 Scoped(Blazor Server)或 Singleton(Blazor WebAssembly),且早于
AuthenticationStateProvider的消费者(如CascadingAuthenticationState)注册 - 重写
GetAuthenticationStateAsync()返回当前状态(同步或异步获取用户信息) - 调用
NotifyAuthenticationStateChanged(Task<才能触发 UI 更新
authenticationstate>)</authenticationstate>
手写一个基于 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。
芦笋演示
一键出成片的录屏演示软件,专为制作产品演示、教学课程和使用教程而设计。
237
查看详情
常见错误写法:
❌ this._currentUser = new ClaimsPrincipal(identity); // 不会刷新 UI正确做法:
- 构造新的
AuthenticationState实例(含新ClaimsPrincipal) - 调用
NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(principal))) - 如果操作是异步的(如从 API 获取用户信息),可直接返回该异步 Task
与路由和组件配合使用
确保 App.razor 中已包裹 CascadingAuthenticationState:
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
<FocusOnN*igate RouteData="@routeData" Selector="h1" />
</Found>
<NotFound>
<PageTitle>Not found</PageTitle>
<LayoutView Layout="@typeof(MainLayout)">
<p role="alert">Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
之后你就能在任意组件中使用:
-
<authorizeview>...</authorizeview>根据角色/策略切换内容 -
@attribute [Authorize]控制页面访问权限 -
@inject AuthenticationStateProvider AuthStateProvider手动获取当前状态(不推荐频繁调用,优先用AuthorizeView)
基本上就这些。不复杂但容易忽略 Notify 通知和生命周期注册时机,踩坑多在这两处。
以上就是Blazor AuthenticationStateProvider 使用教程的详细内容,更多请关注其它相关文章!
# 你就
# 南京网站建设优化企业
# 网站推广热销易速达
# 鄂州农产品网站建设公司
# 网站建设要求有哪些内容
# 广西抖音推广营销公司
# 抖音seo推广教程
# 谷歌推广和seo 快速推广
# 长安区企业网站推广价钱
# 龙岗网站建设服务提供商
# 宁夏seo快排技巧
# 相关文章
# 适用于
# 如何在
# 在这
# js
# 序列化
# 操作指南
# 如何将
# 重写
# 自定义
# gate
# 路由
# ai
# session
# 工具
# app
# 浏览器
# cad
# go
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
C++ string find函数返回值npos详解_C++字符串查找失败的判断条件
微博网页版首页入口 微博电脑端官网登录链接
微信网页版官方快速登录入口 微信网页版网页版账号直达
一加手机电池耗电快怎么办_一加手机电池耗电快的解决方法
AO3最新入口2025公告_AO3中文官网合集
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
c++ dfs和bfs代码 c++深度广度优先搜索算法
php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Steam官网入口直达 Steam注册及登录步骤
小米14应用无法联网原因分析_小米14网络权限修复
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Django表单验证失败时保留用户输入数据的最佳实践
zookeeper 都有哪些功能?
c++ 获取系统当前时间 c++时间戳获取方法
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
Node.js 中使用 node-cron 实现定时 API 数据抓取与处理
最新韩小圈网页版登录入口_官网在线观看官方链接
在Typer应用中优雅地处理和重组任意命令行参数
处理嵌套交互式控件:前端可访问性指南
在python-socketio事件处理器中安全访问Flask应用上下文
Go语言HTML解析:利用Goquery精准获取指定元素内容
马斯克:Optimus 人形机器人复数形式为 Optimi
漫蛙漫画官方首页 漫蛙2漫画在线阅读入口
sublime侧边栏怎么增强功能_SideBarEnhancements for sublime安装与配置
新三国志曹操传110级星符试炼夏侯渊极难攻略
绝地鸭卫平a核爆刀流玩法攻略
如何将HTML表格多行数据保存到Google Sheets
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
如何解决电商平台定制报价请求的“黑洞”问题,SprykerQuoteRequest模块助你提升客户体验与销售效率
Typer应用中灵活处理命令行参数的令牌化与解析
高德地图怎么看全景照片_高德地图全景照片浏览教程
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
C++如何生成随机数_C++ random库使用方法与范围设置
快手官方唯一登录入口 谨防山寨钓鱼网站
抖音创作助手登录入口_抖音创作辅助工具官网直达
Lar*el 递归关系中排除指定分支的教程
谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问
AO3同人作品网入口 AO3搜索引擎官网永久地址
外媒分析《GTA6》定价:卖100美元可以但真没必要!
提升Kafka消费者健壮性:会话超时处理与消息处理语义
J*aScript:在map操作中高效处理空数组
Win11怎么开启高性能模式_Windows 11电源计划优化设置
响应式容器内容自动缩放与宽高比维持教程
163邮箱注册官网 免费申请163个人邮箱
企业名称高精度匹配:N-gram方法在结构相似性分析中的应用
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明


2025-12-15
浏览次数:次
返回列表
authenticationstate>)</authenticationstate>