在 Blazor 视图之外访问经过身份验证的用户

2023-12-21

在我的服务器端 Blazor 应用程序中,身份验证以非常规的方式处理。本质上,当用户访问该页面时,他们将使用其 Windows 凭据进行身份验证。此时,将创建一个自定义策略来在外部数据库 (Informix) 中查找该用户名,在该数据库中可以找到该用户在应用程序中的授权。特别是对于应用程序中的每个授权级别(可以更新、转到此页面等),我正在创建一个新声明,以根据数据库中存储的权限添加到当前用户。

通常在视图中,我只使用AuthenticationStateProvider获取此信息并且它可以正常工作。但是,当我需要访问处理更新/业务逻辑的服务类中的用户信息时,我似乎根本无法访问声明/用户。例如,一个用例是根据初始身份验证期间添加的声明获取当前 Windows 帐户存储在数据库中的用户名,以记录其活动/轨迹。另一种方法是从数据库中获取当前登录用户的全名。

我已经在带有身份验证状态提供程序的服务类中尝试过 DI,并且HTTPContext但它们都不起作用。我知道整体结构并不理想,但这是我必须处理的。 任何有关如何解决此问题的见解将不胜感激!


我注入的身份验证状态提供程序无法正常工作,因为我的服务类是单例,而身份验证状态提供程序是有范围的。简而言之,您不能在单例中使用作用域类(详细信息请参见此处:升级到 ASP.NET Core 2.0 后,无法使用单例 IActiveUsersService 中的作用域服务 IMongoDbContext https://stackoverflow.com/questions/45810851/cannot-consume-scoped-service-imongodbcontext-from-singleton-iactiveusersservice)

我更改了我的服务类,这些服务类取决于启动时范围内的身份验证状态提供程序,并且它的工作没有问题。

太长了;将 AuthenticationStateProvider 注入到您的服务类中,并使该类以及任何依赖于它的类在启动时具有作用域。

services.AddScoped<ServiceClass>();

那么您的服务类将如下所示:

private readonly AuthenticationStateProvider _authenticationStateProvider;

public ServiceClass(AuthenticationStateProvider authenticationStateProvider)
{
     _authenticationStateProvider = authenticationStateProvider;
}

//Use authenticationStateProvider same as you do in view in class

任何依赖于该服务类的类也需要确定作用域,而不是单例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Blazor 视图之外访问经过身份验证的用户 的相关文章

随机推荐

  • swift 3 - 创建具有关系的条目

    我第一次处理核心数据中的关系 我现在有什么 let appdelegate NSApplication shared delegate as AppDelegate let context appdelegate persistentCon
  • 如何使用 CAP_SYS_ADMIN

    有人可以向我解释一下如何在 c 中使用或设置 CAP SYS ADMIN 吗 我需要卸载 USB 驱动器的功能 但不知道如何使用它 以下是使用命令行执行此操作的方法 sudo setcap cap sys admin ep executab
  • Openlayers 导出到 KML 并保留我的地图样式

    我成功地从 Openlayers 编写了 KML 但是 kml 文件中不存在任何样式 颜色 描边等 是否可以生成带有样式的 KML 我在这里发现了类似的问题 https gis stackexchange com questions 170
  • 在电子表格中添加行(基于列表的提要)但它不起作用

    我已使用以下代码在电子表格 基于列表的提要 中添加行 但它不起作用 NSMutableArray array NSMutableArray alloc init GDataEntrySpreadsheetList listEntry GDa
  • 通过标签继承选择最佳可用功能

    假设用户定义了以下函数的一些子集 void f int void g int void h int 你的任务是写一个函数call best int 它调用上面声明的列表中的第一个函数 然后您可以假设它也已定义 你是怎样做的 首先 我们定义一
  • 使用 VBA 选择动态单元格范围并创建图表

    我正在尝试使用 VBA 创建使用动态范围的图表 具体来说 我有一个Excel table如下 根据这些数据 我想创建一个图表 并根据要求更改日期范围 例如 在一种情况下 我需要制作 7 月 1 日至 7 月 6 日的图表 而在另一种情况下
  • WebDriver:添加新元素

    有没有一种方法可以在当前 DOM 中添加 插入元素 首先我要说的是 这是一个非常糟糕的主意 认真思考为什么要这样做 那么 如果你还想动态添加元素 那就再考虑一下吧 WebDriver 旨在模仿用户与页面的交互 用户通常不会随意添加元素 也就
  • flutter intellij 插件:java 语言支持吗?

    在我的设置中 Intellij Flutter 插件不支持 Java 代码 它将 Java 类视为文本文件 有什么方法可以让 Intellij 支持我使用 Android 特定的 Java 代码吗 类型检查 完成建议 导入 重构 这是我的颤
  • 使用 SELECT 结果集通过 MySQL 存储过程运行 UPDATE 查询

    我试图了解 MySQL 存储过程 我想检查用户登录凭据是否有效 如果有效 则更新用户在线状态 DROP PROCEDURE IF EXISTS checkUser DELIMITER CREATE PROCEDURE checkUser I
  • Haskell 中的稀疏数组?

    Haskell 中是否有任何标准或 最常用 的方法来表示多维稀疏数组 不会过多牺牲性能 例如 C 中的 map gt 我用谷歌搜索了一下 发现只有一些旧的学术论文 还有其他人也在问这个问题 Thanks Data Map Int Int M
  • 什么时候在构造函数和析构函数中调用 this-> 是安全的

    到目前为止我还没有找到一个确定的答案 什么时候打电话比较安全this gt 来自对象内部 特别是在构造函数和析构函数内部 而且 当使用公共继承时 在此调用的结果上使用向上和向下转换是否安全 例如 class foo foo a b this
  • BigQuery 嵌套字段:ARRAY 类型的列单元不能在 SELECT DISTINCT 中使用

    我想在 BigQuery 中选择表的唯一行 但收到 以下错误 ARRAY 类型的列单位不能在 SELECT DISTINCT 中使用 我的查询是 SELECT DISTINCT from table 表架构 mode NULLABLE na
  • C# 模拟 IHttpclient 和 CreateClient

    我有一个想要进行 x 单元测试的函数 但似乎我必须模拟 CreateClient 函数 每当我在测试期间调试它时 var client 似乎等于 null 我确信我正在正确注入依赖项 我想知道的是如何模拟 CreateClient 这是该函
  • 使用 Python 获取列的两个值之间的行

    假设有一个数据框如下 df Period 1996 Jan Feb March 1997 Jan Feb March 1998 Jan Feb March Some Values a b c d e f g h i 以及值之间的行1996
  • 在 XCode 中签名应用程序:在钥匙串中找不到指定的项目

    在 XCode 中存档应用程序 产品 gt 存档 时 出现以下错误 CodeSign Users xxx Library Developer Xcode DerivedData name xxx Build Intermediates Ar
  • Python - 使用正则表达式来过滤数据

    有没有一种简单的方法可以从给定字符串中删除与给定正则表达式匹配的所有字符 我知道在 Ruby 中我可以使用gsub gt gt key cd baz ls l gt cd baz ls l gt gt newkey key gsub w d
  • 错误:模块“app”:找不到平台“android-28”。在项目同步成功之前,设计编辑器不可用

    所以 我是新来的 刚刚安装了 Android Studio 然后想创建一个基本的 Activity 但问题是他们希望我安装 SDK 和 Haxm 而 Haxm 不是通过 SDK 管理器安装的 我已经尝试了很多 并使用了 Stack over
  • 修改 NSDate 以表示从今天起 1 个月

    我正在向我正在开发的 Cocoa 应用程序添加重复事件 我每天和每周都会重复 因为我可以用数学方式定义这些 3600 24 7 1 周 我使用以下代码来修改日期 NSDate dateWithTimeIntervalSinceNow 360
  • 如何为现有项目生成asgi.py?

    我在 2 2 中有一个现有的 django 项目 但现在我想开始使用通道 所以我必须更改为 3 0 和 asgi 而不是 wsgi 如何生成运行应用程序所需的 asgi py Django 有一个模板文件here https github
  • 在 Blazor 视图之外访问经过身份验证的用户

    在我的服务器端 Blazor 应用程序中 身份验证以非常规的方式处理 本质上 当用户访问该页面时 他们将使用其 Windows 凭据进行身份验证 此时 将创建一个自定义策略来在外部数据库 Informix 中查找该用户名 在该数据库中可以找