【问题标题】:Asp.net Identity with Cosmosdb as storage使用 Cosmosdb 作为存储的 Asp.net Identity
【发布时间】:2022-07-04 02:26:37
【问题描述】:

我正在尝试在我的 razor pages 应用程序上使用 asp.net 身份。默认实现使用带有实体框架的sql。

我正在尝试使用 cosmos db (sql api) 进行存储。我在program.cs中修改了如下代码。

builder.Services.AddDbContext<ApplicationDbContext>(options =>
        options.UseCosmos("https://end-point/", "key", "db-name")
    );

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

在 ApplicationDbContext 类中,OnModelCreating 被覆盖如下:

builder.Entity<IdentityUser>(model =>
            {
                model.ToContainer("container-name").HasNoDiscriminator();
                model.HasPartitionKey(nameof(IdentityUser.Id));
                model.Property(p => p.ConcurrencyStamp).IsETagConcurrency();                
            });

通过这些更改,在运行应用程序时,它会构建。它还使用给定的用户名和密码进行注册。点击注册按钮,它会显示电子邮件确认链接。

此时,用户未登录。点击确认链接后,显示确认成功,但用户仍然未登录

在验证 cosmos db 容器时,会创建用户并将其存储在 db 中。

我想看看它是否能让我使用我用来注册的相同凭据登录,因为用户存在于 db 中。

但是会报错

CosmosException:响应状态码不表示成功:NotFound(404);子状态:0;

我不会更改任何 IdentityUser 类或 UserStore 类。

感谢所有帮助指出它为什么会引发 NotFound 错误以及为什么它没有让我登录以及如何解决。

【问题讨论】:

    标签: c# azure-cosmosdb identity .net-6.0


    【解决方案1】:

    我刚刚发布了一个适用于 .Net 6 的 Cosmos DB 提供程序。它使用实体框架。

    这是项目、文档和说明的链接:

    https://github.com/CosmosSoftware/AspNetCore.Identity.CosmosDb

    如果您有反馈,那就太好了!

    谢谢!

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 2018-07-14
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      • 2017-04-20
      相关资源
      最近更新 更多