ASP.NET Core 2.2 创建身份用户

2024-01-16

ASP.Net Core 全新。必须使用 Identity 创建一个 asp.net core 2.2 项目(并让用户播种)。

我找不到任何有关如何准确执行此操作的文档。

我能够找到创建身份角色的代码(无论如何编译,还没有达到可以运行它的位置:

  private static async Task CreateUserTypes(ApplicationDbContext authContext, IServiceProvider serviceProvider)
  {
     var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
     string[] roleNames = { "Administrator", "Data Manager", "Interviewer", "Respondent" };
     IdentityResult roleResult;
     foreach (var roleName in roleNames)
     {
        var roleExist = await RoleManager.RoleExistsAsync(roleName);
        if (!roleExist)
        {
           roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
        }
     }
  }

现在,我需要创建一些用户。但是我找不到奇怪的微软语法(谷歌搜索了两天)。

这是做什么的not work:

   private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
  {
     //Create the root ADMIN user for all things admin.
     UserManager<ApplicationDbContext> userManager = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();

     IdentityUser user = new IdentityUser()
     {
        UserName = "[email protected] /cdn-cgi/l/email-protection",
        Email = "[email protected] /cdn-cgi/l/email-protection"
     };

     var NewAdmin = await userManager.CreateAsync(user, "password");
  }

我看到的错误是:

Argument1:无法从“Microsoft.AspNetCore.Identity.IdentityUser”转换为“ApplicationDbContext”

是这个意思吗?显然,我没有合适的用户管理器。但,我怎样才能找到合适的将用户作为第一个参数,将字符串(密码)作为第二个参数?

此外,谷歌搜索中出现的例子有一个ApplicationUser我没有(并且不需要?)的对象。示例中没有定义我如何获取它。

Owen

好的。过去有语法错误,但现在我收到运行时错误:

NullReferenceException:未将对象引用设置为对象的实例。在调用 CreateAsync 时。这是新代码:

private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
{
     //Create the root ADMIN user for all things admin.         
     var userStore = new UserStore<IdentityUser>(authContext);
     UserManager<IdentityUser> userManager = new UserManager<IdentityUser>(userStore, null, null, null, null, null, null, serviceProvider, null);
     // = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();

     IdentityUser user = new IdentityUser()
     {
        UserName = "[email protected] /cdn-cgi/l/email-protection",
        Email = "[email protected] /cdn-cgi/l/email-protection"
     };

     var result = await userManager.CreateAsync(user, "password");
}

是否要研究 create userManager 的其他参数是什么以及如何从 serviceProvider 获取它们?

--Owen

想出了怎么做。关键是找到正确的服务提供商来传递and创建 userManager 的正确语法。我通过谷歌找到的其他答案更换IdentityUser与他们自己的ApplicationUser那是把水搅浑了。这是工作功能(希望这对某人有帮助):

  private static async Task CreateRootUser(Models.CensORContext context, ApplicationDbContext authContext, IServiceProvider serviceProvider)
  {
     //Create the root ADMIN user for all things admin.         
     var userStore = new UserStore<IdentityUser>(authContext);
     UserManager<IdentityUser> userManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
     //new UserManager<IdentityUser>(userStore, null, null, null, null, null, null, serviceProvider, null);
     // = serviceProvider.GetRequiredService<UserManager<ApplicationDbContext>>();

     IdentityUser user = new IdentityUser()
     {
        UserName = "[email protected] /cdn-cgi/l/email-protection",
        Email = "[email protected] /cdn-cgi/l/email-protection"
     };

     var result = await userManager.CreateAsync(user, "password");
     result = await userManager.AddToRoleAsync(user, "Administrator");
  }

您的主要问题似乎是依赖项注入。看一下这个链接 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2了解更多信息。只要你注入你的DbContext and UserManager以正确的方式,其余的代码应该没问题。

这是一个例子。您可以设置单独的种子服务,以确保您的代码与其余代码分离。

public class UserSeeder
{
    private readonly UserManager<IdentityUser> userManager;
    private readonly ApplicationDbContext context;

    public UserSeeder(UserManager<IdentityUser> userManager, ApplicationDbContext context)
    {
        this.userManager = userManager;
        this.context = context;
    }

    public async Task `()
    {
        string username = "[email protected] /cdn-cgi/l/email-protection";
        var users = context.Users;
        if (!context.Users.Any(u => u.UserName == username))
        {
            var done = await userManager.CreateAsync(new IdentityUser
            {
                UserName = username,
                Email = username
            }, username);
        }
    }

}

然后,您必须将此类添加为作用域(因为您的DbContext范围)通过使用services.AddScoped<UserSeeder>()在你的启动中。您现在可以简单地注入您的UserSeeder在任何服务(除了单例)中并致电您的UserSeeder功能。例如,您可以注入UserSeeder在家庭控制器中并将其称为索引操作。通过这种方式,最初会检查并添加种子。但是,只有当您首先进入主页时,这才有效。或者,您可以在启动类中设置这样的中间件:

app.Use(async (context, next) => {
    await context.RequestServices.GetService<UserSeeder>().SeedAsync();
    await next();
});

请注意,这两种方式每次都会调用数据库。您可以计划将其放置在哪里。您还可以确保在布尔值的帮助下仅调用一次(可以在单例中)。但请注意,这只会在应用程序启动时运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core 2.2 创建身份用户 的相关文章

随机推荐

  • MySQL 整数字段在 PHP 中以字符串形式返回

    我在 MySQL 数据库中有一个表字段 userid INT 11 所以我用这个查询将它调用到我的页面 SELECT userid FROM DB WHERE name john 然后为了处理结果我这样做 row result gt fet
  • Here Maps Routing API V8 - 多个路径点

    我对 Here Maps Routing API v8 非常陌生 我已经尝试过这里提供的示例 https developer here com documentation maps 3 1 15 1 dev guide topics rou
  • 在 C# 中使用 Directory.GetFiles 和正则表达式?

    我有这个代码 string files Directory GetFiles path SearchOption AllDirectories 我想要的是仅返回不以以下内容开头的文件p and t 并具有扩展名 png 或 jpg 或 gi
  • .External.graphics R 中的错​​误

    我使用下面的函数从 48 列 X 32 行的矩阵创建热图 heatmap 2 all data Rowv FALSE Colv FALSE trace none main All data col colorRampPalette c gr
  • 如何在Authorize.net中查看交易已结算/未结算?

    如何在authorize net中查找用户进行的交易是否已结算或未结算 我正在使用AIM 我想通过编码 当交易完成时 我找不到交易状态 但我想知道它是已结算还是未结算的交易 提前致谢 您无法通过编码获取此信息 因为 Authorize Ne
  • 如何计算具有重复元素的列表的排列(排列)

    我有一个包含重复元素的列表 即orig 1 1 1 2 2 3 我想创建一个精神错乱 https en wikipedia org wiki Derangement b f orig 这样对于每个位置值b与值不同orig b i orig
  • 不安全的 C 函数及其替换

    如果我错了 请纠正我 我在网站上进行了研究 但找不到针对此问题的任何综合帖子 C 中有许多不安全函数可能导致缓冲区溢出 并且有安全函数来替代它们 我有几个 gets 替换为 fgets sprintf 替换为 strcat 替换为 strc
  • 使用 AngularJS 的数据表中的单元格按钮

    我正在使用 angularjs 构建一个网站 并从网络服务获取数据 我需要将该数据填充到数据表中 并为每一行创建一个编辑按钮 经过一番调查我想出了this http jsfiddle net ultrasardine 7kLFU 485 问
  • 网站未在某些页面加载 css 文件

    我正在构建的网站不会加载某些页面的任何 css javascript 文件 有问题的页面是 Markdown 帖子文件 我正在使用 Jekyll 来构建该网站 链接在这里 http joshhornby co uk http joshhor
  • 如何将数组转换为元组?

    我有一个Array Any 来自 Java JPA 包含 在本例中为两个 但考虑任意少量 不同类型的事物 我想将它们表示为元组 我有一些快速而肮脏的转换代码 并且想知道如何改进它并使其更加通用 val pair query getSingl
  • 如何在jvm上运行scala字节码?

    如何在 jvm 上运行编译后的 scala 代码 当我尝试以下命令时 java cp scala library jar cp bin com mcmc5 Main 我收到以下错误 Exception in thread main java
  • 将多个正则表达式连接成一个正则表达式

    对于文本文件 我想匹配以 BEAM 和 FILE PATH 开头的字符串 我会用 BEAM FILE PATH 如果我要单独匹配它们 但现在我必须将这两个匹配模式连接成一个模式 关于如何做到这一点有什么想法吗 竖线 竖线字符通常用正则表达式
  • MSTest 似乎毫无原因地挂起

    从命令行运行 MSTest 测试在 等待运行 代理 时挂起 没有任何错误或超时 原因可能是 队列中没有运行 但为什么会这样我不知道 因为exact同样的测试在另一台机器上运行得很好 我们最近从在测试机器上评估 TeamCity 转向将其安装
  • 如何处理 Perl 正则表达式中的特殊字符?

    我正在使用 Perl 程序从文件中提取文本 我有一个字符串数组 用作文本的分隔符 例如 pat arr 1 arr 2 if src pat print 1 但是 数组中的两个字符串是 450 and Buy now 这些的问题在于字符串中
  • Android:应用内购买查询不返回任何产品(skuDetails)

    我正在开发我的第一个 Android 应用程序 我确实在堆栈溢出方面学到了很多东西 但我目前的问题还没有找到解决方案 我尝试实现 应用内购买 我做了以下事情 1 在开发者控制台中 我上传了经过 alpha 和 beta 测试的已签名 apk
  • django.db.utils.IntegrityError:唯一约束失败:rango_category__new.slug

    我正在使用 Django 从 Tango 学习 Django 但是当我输入以下内容时 我不断收到此错误 python manage py makemigrations rango python manage py migrate 这是输出
  • 如何在C++中使用OpenCV检测多个物体?

    我从这个答案中得到了启发here https stackoverflow com a 43076532 385127 这是一个Python实施 但我需要C 这个答案非常有效 我的想法是 detectAndCompute to get key
  • 在 Play 中定义全局变量的最佳方式! 2.0应用

    游戏中 2 0 一个就可以用Global据记录here http www playframework org documentation 2 0 ScalaGlobal Global需要位于默认 空 包中 我的应用程序中还需要全局变量 其中
  • 我想获取Java中的当前时间,但没有互联网,也没有系统时间

    我想获得准确的当前时间 我不想要系统时间 因为任何人都可以更改系统时间 并且我想在不访问互联网的情况下执行此操作 有什么办法吗 时间服务器 设置一个时间服务器 https en m wikipedia org wiki Time serve
  • ASP.NET Core 2.2 创建身份用户

    ASP Net Core 全新 必须使用 Identity 创建一个 asp net core 2 2 项目 并让用户播种 我找不到任何有关如何准确执行此操作的文档 我能够找到创建身份角色的代码 无论如何编译 还没有达到可以运行它的位置 p