Blazor 服务器端应用程序。如何在类中使用 Windows 身份验证?

5

我正在使用最新的VS2019Pro与Core 3.1。

Blazor ServerApp似乎在.razor页面的@code{}标记中运行实时代码。因此,我认为,与其使用API提供数据,创建返回数据的类和方法会更有意义。

唯一的问题是,在类中能否使用User.Identity.Name属性。通常情况下,在.razor页面和控制器中都可以轻松地提供它,但我该如何(如果可能的话)在类中使用相同的User.Identity.Name属性呢?

2个回答

3
您可以使用标准的 .NET Core 身份验证:https://learn.microsoft.com/zh-cn/aspnet/core/blazor/security/?view=aspnetcore-3.1 基本上,您需要定义一个:
[CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; }

那么您可以等待它:

private async Task LogUsername()
    {
        var authState = await authenticationStateTask;
        var user = authState.User;

        if (user.Identity.IsAuthenticated)
        {
            _authMessage = $"{user.Identity.Name} is authenticated.";
        }
        else
        {
            _authMessage = "The user is NOT authenticated.";
        }
    }

编辑 -----

像这样吗?

基础组件:

[CascadingParameter] private Task<AuthenticationState> authenticationStateTask { get; set; }

public String Username {get;set;}

protected override async Task OnInitializedAsync(){
    Username = (await authenticationStateTask).User.Identity.Name;
}

然后在您的其他组件中:

@inherits BaseCompomnent

@Username

嗨,Milney,我在authState变量上遇到了一个没有对象设置为引用错误。所有这些代码都在一个类中,对吧? - Izacch
@Izacch - 抱歉我漏掉了一点,你还需要使用[CascadingParameter]属性来修饰任务。这是因为它是由更高级别的组件传递下来的。现在请查看编辑后的代码。 - Milney
嘿,我仍然遇到相同的异常。我是否错误地认为我可以在.cs文件中使用上面的代码示例?我正在从Razor页面调用该方法。 - Izacch
嘿,Milney,只要这是正确的方法,就没有问题 :) 有没有办法使这段代码更全局化,适用于所有剃刀页面,以便不需要重复? - Izacch
1
@Izacch 更新您的问题并说明您尝试了什么?看看我的编辑 - 类似这样? - Milney
显示剩余9条评论

0
 IMyRoleManager _myRoleManager;
    private AuthenticationStateProvider _authenticationStateProvider;
    public MyRepository(IMyRoleManager myRoleManager, AuthenticationStateProvider authentication)
    {
        _myRoleManager = myRoleManager;
        _authenticationStateProvider = authentication;
    }

 public async Task<bool> AddRoleToUser(string role)
    {
        var id = await GetUserIdFromAuthenticationStateProviderAsync();
        var result = await _myRoleManager.SetRoleForUser(role, id);
        return result;
    }

在启动文件中,必须有正确的条目以支持 services.xxx(身份服务)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接