AuthorizeView Roles doesn't recognize role even though the code does

Viewed 1298

I'm trying to set up authorization with Blazor .net core 3.1 and the AuthorizeView Roles doesn't seem to recognize the role that is in the database. On the other hand, if I try to do it in code and I've set up a little message if it finds the role with the user, it finds the role and displays the ""User is a Valid User" message. I'm using this with AzureAd Microsoft authentication and AspNetCore identity package.

Here's the index page code

@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";
                }
            }
        }
    }
}

Here are my services:

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

0 Answers
Related