gpt4 book ai didi

c# - 如何在 ASP.NET Core(不是旧版本!)中实现自定义 UserStore(或自定义身份验证)

转载 作者:太空狗 更新时间:2023-10-29 23:05:56 25 4
gpt4 key购买 nike

我正在尝试使用 ASP.NET Core 1(2016 年 5 月)构建新网站,并且我需要实现不同类型的登录过程(不是使用 SQL Server)。

所以我正在尝试实现 MyOwnUserStore,我想在其中覆盖登录过程,但是当我启动应用程序时,结果是这个异常:

InvalidOperationException: Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContext' while attempting to activate 'LoginWebApp04.Services.MyOwnUserStore'.

我的代码很简单,新类:

public class MyOwnUserStore : UserStore<ApplicationUser>
{
public MyOwnUserStore(DbContext context, IdentityErrorDescriber describer = null)
: base(context, describer)
{
}

...
}

和修改Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

var idt = services.AddIdentity<ApplicationUser, IdentityRole>();
idt.AddUserStore<MyOwnUserStore>(); // <-------------------------- HERE
idt.AddEntityFrameworkStores<ApplicationDbContext>();
idt.AddDefaultTokenProviders();

services.AddMvc();

// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}

我在我的新项目中没有做任何其他更改,该项目被创建为 ASP.NET Core Web 应用程序,具有身份验证 = 个人用户帐户。

那么我需要做些什么才能毫无异常(exception)地首次运行我的应用程序?

我尝试了很多来自互联网的例子,但我发现的都是过时的。

最佳答案

DI 框架不知道要为用户存储解析什么。将构造函数中的 DbContext 更改为 ApplicationDbContext

public class MyOwnUserStore : UserStore<ApplicationUser> {
public MyOwnUserStore(ApplicationDbContext context, IdentityErrorDescriber describer = null)
: base(context, describer) {
}
...
}

更改添加用户存储的顺序。在添加用户存储之前,您需要添加存储的 Entity Framework 。

public void ConfigureServices(IServiceCollection services) {
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

services
.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserStore<MyOwnUserStore>() // <----MOVED AFTER ADDING EF STORES
.AddDefaultTokenProviders();

services.AddMvc();

// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}

关于c# - 如何在 ASP.NET Core(不是旧版本!)中实现自定义 UserStore(或自定义身份验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com