Asp.net 授权查看角色不';即使代码不识别角色,也无法识别

Asp.net 授权查看角色不';即使代码不识别角色,也无法识别,asp.net,blazor,Asp.net,Blazor,我正在尝试使用Blazor.net core 3.1设置授权,而AuthorizeView角色似乎无法识别数据库中的角色。另一方面,如果我尝试在代码中执行此操作,并且我设置了一条小消息,如果它找到用户的角色,它会找到该角色并显示“用户是有效用户”消息。我将此消息用于AzureAd Microsoft身份验证和AspNetCore标识包 这是索引页代码 @page "/" @using Microsoft.AspNetCore.Authorization; @using Microsoft.Asp

我正在尝试使用Blazor.net core 3.1设置授权,而AuthorizeView角色似乎无法识别数据库中的角色。另一方面,如果我尝试在代码中执行此操作,并且我设置了一条小消息,如果它找到用户的角色,它会找到该角色并显示“用户是有效用户”消息。我将此消息用于AzureAd Microsoft身份验证和AspNetCore标识包

这是索引页代码

@page "/"
@using Microsoft.AspNetCore.Authorization;
@using Microsoft.AspNetCore.Identity;
@inject UserManager<IdentityUser> _UserManager
@inject RoleManager<IdentityRole> _RoleManager
@inject AuthenticationStateProvider AuthenticationStateProvider
@attribute [Authorize]


<span>@Message</span>

<AuthorizeView Roles="Users">
    <Authorized>
        <p>Youre In!</p>
    </Authorized>
</AuthorizeView>

@code
{
    [CascadingParameter]
    private Task<AuthenticationState> authStateTask { get; set; }

    string USER_ROLE = "Users";

    string CurrentEmail;
    string Message;

    protected override async Task OnInitializedAsync()
    {
        var authState = await authStateTask;
        var CurrentEmail = authState.User.Identity.Name;
        if (CurrentEmail.Contains("@users.com") == true)
        {
            var user = await _UserManager.FindByNameAsync(CurrentEmail);
            if (user == null)
            {
                var newUser = new IdentityUser { UserName = CurrentEmail, Email = CurrentEmail };
                var createResult = await _UserManager.CreateAsync(newUser);
                if (createResult.Succeeded)
                {
                    var roleResult = await _UserManager.AddToRoleAsync(newUser, USER_ROLE);
                    if (roleResult.Succeeded)
                    {
                        Message = ("Good job");
                    }
                }
            }
            else
            {
                var RoleResult = await _UserManager.IsInRoleAsync(user, USER_ROLE);
                if(RoleResult == true)
                {
                    Message = "User is a Valid User";
                }
                else
                {
                    Message = "User is invalid";
                }
            }
        }
    }
}
@page/“
@使用Microsoft.AspNetCore.Authorization;
@使用Microsoft.AspNetCore.Identity;
@注入UserManager\u UserManager
@注入RoleManager\u RoleManager
@注入AuthenticationStateProvider AuthenticationStateProvider
@属性[授权]
@信息
你加入了

@代码 { [CascadingParameter] 私有任务authStateTask{get;set;} 字符串USER\u ROLE=“Users”; 字符串当前电子邮件; 字符串消息; 受保护的重写异步任务OnInitializedAsync() { var authState=等待authStateTask; var CurrentEmail=authState.User.Identity.Name; if(CurrentEmail.Contains(“@users.com”)==true) { var user=await\u UserManager.FindByNameAsync(currentmail); if(user==null) { var newUser=newidentityuser{UserName=currentmail,Email=currentmail}; var createResult=await\u UserManager.CreateAsync(newUser); if(createResult.successed) { var roleResult=await\u UserManager.AddToRoleAsync(newUser,USER\u角色); 如果(roleResult.成功) { 信息=(“干得好”); } } } 其他的 { var RoleResult=await\u UserManager.IsInRoleAsync(用户,用户角色); if(RoleResult==true) { Message=“用户是有效用户”; } 其他的 { Message=“用户无效”; } } } } }
以下是我的服务:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<AppDbContext>(options => options.UseSqlite("DataSource=db.db"));

            services.AddDefaultIdentity<IdentityUser>()
                .AddRoles<IdentityRole>()
                .AddEntityFrameworkStores<AppDbContext>();

            services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
                .AddAzureAD(options => Configuration.Bind("AzureAd", options));

            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            });

            services.AddScoped<AuthenticationStateProvider, ServerAuthenticationStateProvider>();
            services.AddRazorPages();
            services.AddServerSideBlazor();
            services.AddSingleton<WeatherForecastService>();
        }

public void配置服务(IServiceCollection服务)
{
services.AddDbContext(options=>options.UseSqlite(“DataSource=db.db”);
services.AddDefaultIdentity()
.AddRoles()
.AddEntityFrameworkStores();
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options=>Configuration.Bind(“AzureAd”,options));
services.addcontrollerswithview(选项=>
{
var policy=new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()文件
.Build();
options.Filters.Add(新的授权过滤器(策略));
});
services.addScope();
services.AddRazorPages();
AddServerSideBlazor();
services.AddSingleton();
}

你有没有找到这个解决方案?没有。我没有。虽然我找到了另一个解决方案。它并不完美,但很有效…当然。我想我遵循了这个,它对我很有效。你有没有找到这个解决方案?没有。我没有。虽然我找到了另一个解决方案。它不完美,但很有效…当然。我想我遵循了这个,它是有效的他为我祈祷。