首页 > 解决方案 > AuthorizeView Roles 无法识别角色,即使代码可以识别

问题描述

我正在尝试使用 Blazor .net core 3.1 设置授权,而 AuthorizeView 角色似乎无法识别数据库中的角色。另一方面,如果我尝试在代码中执行此操作,并且如果它找到用户的角色,我已经设置了一条小消息,它会找到角色并显示“用户是有效用户”消息。我' m 将此与 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";
                }
            }
        }
    }
}

以下是我的服务:

        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>();
        }

标签: asp.netblazor

解决方案


推荐阅读