在注册期间将用户分配给角色

Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
2024-05-22T08:32:51.6466667+00:00

嗨,朋友们!!我想知道当用户注册到我的网站时,我是否可以将他们分配给具有最低权限的默认角色,直到我选择将他们添加到另一个角色?只是想知道Startup.cs是否有某种配置来处理这个问题。我看过一些教程,其中允许用户在注册时选择角色。这对我来说没有意义,允许用户将自己分配给管理员角色。同样,我想把他们放在一个默认的角色中。我正在将 Identity Core 用于我的数据存储。谢谢!!!

Note:此问题总结整理于:Assign user to role during Registration

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
50 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 46,456 信誉分 Microsoft 供应商
    2024-05-22T09:14:39.5333333+00:00

    嗨,

    我想知道当用户注册到我的网站时,我是否可以将他们分配给具有最低权限的默认角色,直到我选择将他们添加到另一个角色?只是想知道Startup.cs是否有某种配置来处理这个问题。

    据我所知,没有这种方法可以在Startup.cs配置中设置默认角色。

    要在注册用户时设置默认角色(使用 Asp.net 核心身份),我建议您可以参考以下步骤:

    1. 将角色服务添加到 Identity Append 以添加角色服务:AddRoles复制
    public void ConfigureServices(IServiceCollection services)  
    {  
        services.AddDbContext<ApplicationDbContext>(options =>  
            options.UseSqlServer(  
                Configuration.GetConnectionString("DefaultConnection")));  
        services.AddDefaultIdentity<IdentityUser>()  
            .AddRoles<IdentityRole>()  
            .AddEntityFrameworkStores<ApplicationDbContext>();  
    
        services.AddControllersWithViews();  
        services.AddRazorPages();  
    }  
    
    1. 自定义“标识注册”页:在“解决方案资源管理器”中,右键单击项目>“添加>新的基架项”。 从“添加新基架项”对话框的左窗格中,选择“标识”>“添加”。 在“添加标识”对话框中,选择所需的选项,然后单击“添加”按钮。在这里,我们需要使用“注册”页:Here we need to use the Register page: 然后,我们可以从 Areas/Identity/Pages/Account 文件夹中找到 Register.cshtml 页。 打开Register.cshtml.cs页面,并注入 RoleManager,它可以用来创建/查找/删除角色。148468-image.png复制
         [AllowAnonymous]  
      

    public class RegisterModel : PageModel
    {

    private readonly SignInManager<IdentityUser> _signInManager;  
    private readonly UserManager<IdentityUser> _userManager;  
    private readonly ILogger<RegisterModel> _logger;  
    private readonly IEmailSender _emailSender;  
    private readonly RoleManager<IdentityRole> _roleManager;  
    public RegisterModel(  
        UserManager<IdentityUser> userManager,  
        SignInManager<IdentityUser> signInManager,  
        ILogger<RegisterModel> logger,  
        RoleManager<IdentityRole> roleManager,  
        IEmailSender emailSender)  
    {  
        _userManager = userManager;  
        _signInManager = signInManager;  
        _logger = logger;  
        _roleManager = roleManager;  
        _emailSender = emailSender;  
    }  
    ```   ```xml
       
       然后,在 OnPostAsync 方法中,在用户创建成功后,我们可以使用 RoleManager 查找默认角色,然后使用 UserManager 将用户添加到 Role。代码如下:复制
       
       powershell
       public async Task<IActionResult> OnPostAsync(string returnUrl = null)  
    {  
        returnUrl ??= Url.Content("~/");  
        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();  
        if (ModelState.IsValid)  
        {  
            var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };  
            var result = await _userManager.CreateAsync(user, Input.Password);  
            if (result.Succeeded)  
            {  
                var defaultrole = _roleManager.FindByNameAsync("Default").Result;  
    
                if (defaultrole != null)  
                {  
                  IdentityResult roleresult = await  _userManager.AddToRoleAsync(user, defaultrole.Name);  
                }  
    

    最后,如果我们注册一个新用户,结果如下:148469-image.png

    NET Core SDK 附带一个带有“标识”选项的 Angular 模板。

    dotnet new angular -o <output_directory_name> -au Individual  
    

    SPA的认证和授权


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。