asp.net - 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>();
}
解决方案
推荐阅读
- ios - Swift 分配一个浮点变量
- node.js - 未捕获的类型错误:gax.GoogleProtoFilesRoot 不是构造函数
- xcode - 使用镜像容器进行开发
- excel - 如何在 Excel 工作簿中为特定颜色的每个单元格循环?
- python - 未找到 testing.postgresql 命令:docker 内的 initdb
- xamarin.forms - 如何根据月份将项目添加到 ObservableCollection?
- javascript - 在输入选择填充数据字段之前触发模糊验证 - ReactJS
- typescript - 使用 react-native typescrpit 中的 .tsx 文件生成 .js 文件的 compilerOptions 中的属性是什么
- python - 如何解决以下代码中的 ValueError?
- python - Tkinter:“str”对象在尝试关闭时没有属性“children”