gpt4 book ai didi

c# - ASP.NET Core 2.0 中的多重身份

转载 作者:行者123 更新时间:2023-12-02 00:57:08 25 4
gpt4 key购买 nike

我正在将 ASP.NET Core 1.0 应用程序迁移到 ASP.NET Core 2.0。

在我的启动中,我配置了两个身份:

services.AddIdentity<IdentityUser, IdentityRole>(configureIdentity)
.AddDefaultTokenProviders()
.AddUserStore<IdentityUserStore<IdentityUser>>()
.AddRoleStore<IdentityRoleStore<IdentityRole>>();

services.AddIdentity<Customer, CustomerRole>(configureIdentity)
.AddDefaultTokenProviders()
.AddErrorDescriber<CustomerIdentityErrorDescriber>()
.AddUserStore<CustomerStore<Customer>>()
.AddRoleStore<CustomerRoleStore<CustomerRole>>();

这在 ASP.NET Core 1.0 中工作正常,但在 ASP.NET Core 2.0 中失败并出现错误:System.InvalidOperationException:“方案已存在:Identity.Application”

在 ASP.NET Core 2.0 中,如果我删除对 AddIdentity 的调用之一,错误就会消失。如何迁移代码以便可以在应用程序中使用两种不同类型的身份用户和角色?或者当我在 ASP.NET Core 1.0 中编写此内容时,我在理解事物如何工作时犯了一个根本性错误?

最佳答案

查看 github 上的 ASP.NET Core 源代码后,可以使用此扩展方法添加第二个身份:

using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using System;
using System.Collections.Generic;
using System.Text;

namespace Whatever
{
public static class IdentityExtensions
{
public static IdentityBuilder AddSecondIdentity<TUser, TRole>(
this IServiceCollection services)
where TUser : class
where TRole : class
{
services.TryAddScoped<IUserValidator<TUser>, UserValidator<TUser>>();
services.TryAddScoped<IPasswordValidator<TUser>, PasswordValidator<TUser>>();
services.TryAddScoped<IPasswordHasher<TUser>, PasswordHasher<TUser>>();
services.TryAddScoped<IRoleValidator<TRole>, RoleValidator<TRole>>();
services.TryAddScoped<ISecurityStampValidator, SecurityStampValidator<TUser>>();
services.TryAddScoped<IUserClaimsPrincipalFactory<TUser>, UserClaimsPrincipalFactory<TUser, TRole>>();
services.TryAddScoped<UserManager<TUser>, AspNetUserManager<TUser>>();
services.TryAddScoped<SignInManager<TUser>, SignInManager<TUser>>();
services.TryAddScoped<RoleManager<TRole>, AspNetRoleManager<TRole>>();

return new IdentityBuilder(typeof(TUser), typeof(TRole), services);
}
}
}

关于c# - ASP.NET Core 2.0 中的多重身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47433269/

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