- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个地方
services.AddIdentity<AppUser, AppRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserManager<userManage>()
.AddDefaultTokenProviders();
AppUser
和
AppRole
的地方,但是似乎因此失败。我不断
IdentityUser
和
IdentityRole
的扩展名之前,一切正常
services.AddIdentityServer(options => {
options.UserInteraction.LoginUrl = "/Account/Login";
})
.AddSigningCredential(new X509Certificate2(Path.Combine(".", "certs"
, "IdentityServer4Auth.pfx")))
.AddAspNetIdentity<AppUser>()
.AddConfigurationStore(options => {
options.ConfigureDbContext = builder =>
builder.UseSqlServer(connection_string, sql => sql.MigrationsAssembly(migrations_assembly));
})
.AddOperationalStore(options => {
//options.DefaultSchema = "token";
options.ConfigureDbContext = builder =>
builder.UseSqlServer(connection_string, sql => sql.MigrationsAssembly(migrations_assembly));
})
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddJwtBearerClientAuthentication()
.AddProfileService<IdentityProfileService>();
services.AddIdentity<ApplicationUser, IdentityRole>(options =>
{ })
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddDistributedMemoryCache();
services.AddIdentity<AppUser, AppRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddUserManager<userManage>()
.AddDefaultTokenProviders();
AppUser
,
AppRole
和
userManage
,因为它们与我的许多应用程序中使用的设置相同,但是一旦与IDS4混合使用,现在就会失败。在工作时,我已经扩展了
IdentityUser
public class ApplicationUser : IdentityUser {}
AppUser
,
AppRole
和
userManage
。我将模型放在下面
var signin_result = await _signInManager.PasswordSignInAsync(_user, test, model.RememberMe, false);
SELECT [uc].[Id], [uc].[ClaimType], [uc].[ClaimValue], [uc].[UserId]
FROM [AspNetUserClaims] AS [uc]
WHERE [uc].[UserId] = @__user_Id_0
2018-10-08 13:17:47.164 -07:00 [Information] Entity Framework Core "2.1.4-rtm-31024" initialized '"ApplicationDbContext"' using provider '"Microsoft.EntityFrameworkCore.SqlServer"' with options: "SensitiveDataLoggingEnabled "
2018-10-08 13:17:47.189 -07:00 [Information] Executed DbCommand ("1"ms) [Parameters=["@__user_Id_0='11325643' (Size = 450)"], CommandType='Text', CommandTimeout='30']"
""SELECT [uc].[Id], [uc].[ClaimType], [uc].[ClaimValue], [uc].[UserId]
FROM [AspNetUserClaims] AS [uc]
WHERE [uc].[UserId] = @__user_Id_0"
2018-10-08 13:17:47.370 -07:00 [Error] An exception occurred in the database while iterating the results of a query for context type '"test.app.Data.ApplicationDbContext"'."
""System.ArgumentNullException: Value cannot be null.
Parameter name: type
at System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue)
at System.Security.Claims.Claim..ctor(String type, String value)
at Microsoft.AspNetCore.Identity.IdentityUserClaim`1.ToClaim()
at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ProjectionShaper.TypedProjectionShaper`3.Shape(QueryContext queryContext, ValueBuffer& valueBuffer)
at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ProjectionShaper.TypedProjectionShaper`3.Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.IShaper<TOut>.Shape(QueryContext queryContext, ValueBuffer& valueBuffer)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable`1.AsyncEnumerator.BufferlessMoveNext(DbContext _, Boolean buffer, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable`1.AsyncEnumerator.MoveNext(CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)"
System.ArgumentNullException: Value cannot be null.
Parameter name: type
at System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue)
at System.Security.Claims.Claim..ctor(String type, String value)
at Microsoft.AspNetCore.Identity.IdentityUserClaim`1.ToClaim()
at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ProjectionShaper.TypedProjectionShaper`3.Shape(QueryContext queryContext, ValueBuffer& valueBuffer)
at Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.ProjectionShaper.TypedProjectionShaper`3.Microsoft.EntityFrameworkCore.Query.ExpressionVisitors.Internal.IShaper<TOut>.Shape(QueryContext queryContext, ValueBuffer& valueBuffer)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable`1.AsyncEnumerator.BufferlessMoveNext(DbContext _, Boolean buffer, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable`1.AsyncEnumerator.MoveNext(CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)
2018-10-08 13:17:48.680 -07:00 [Information] Executed action "WSU.Sso.Controllers.AccountController.Login (test.app)" in 2022.4589ms
public class AppUser : IdentityUser {}
public class AppRole : IdentityRole {}
public class AppUserClaim : IdentityUserClaim<string> {}
public class AppUserRole : IdentityUserRole<string> {}
public class AppRoleClaims : IdentityRoleClaim<string> {}
public partial class CoreDbContext : IdentityDbContext
<
AppUser, // TUser
AppRole, // TRole
string, // TKey
AppUserClaim, // TUserClaim
AppUserRole, // TUserRole,
IdentityUserLogin<string>, // TUserLogin
AppRoleClaims, // TRoleClaim
IdentityUserToken<string> // TUserToken
>//, ICoreDbContext
{
//etc..
}
UserManager<TUser> userManager
必须是
userManage
,因为我对此进行了扩展。我猜我需要扮演我自己的角色吗?
userManage
扩展
UserManager<TUser>
仍然失败的原因
.AddAspNetIdentity<AppUser>()
,但是那没有用。显然,不是来自DB的东西为null,而是必须加上它的值为null的东西。我不能说什么,只是它必须在
Microsoft.AspNetCore.Identity.IdentityUserClaim<TKey>.ToClaim()
和
IdentityServer4.AspNetIdentity.UserClaimsFactory<TUser>.CreateAsync(TUser user) in UserClaimsFactory.cs
之间。我可以肯定地说的是,在
https://github.com/IdentityServer/IdentityServer4.AspNetIdentity/blob/dev/src/UserClaimsFactory.cs中,所有要设置的部分均已通过验证DB为非null。
user_id
而不是
Id
(
Microsoft Owin Security - Claims Constructor Value cannot be null是导致我考虑这一点的原因)。话虽如此,我相信设置没有问题,这就是我
OnModelCreating(ModelBuilder builder)
中的内容,
builder.Entity<AppUser>().Property(p => p.Id).HasColumnName("user_id");
public class IdentityUserClaim<TKey> where TKey : IEquatable<TKey>
并在
Claim ToClaim()
上设置断点后,类型为null。这是日志上的一个问题,但是我似乎无法在其起源的调用堆栈中回溯。我的问题是,如果数据库查询返回一组正确的类型和值,那么为什么要先处理一个空类型和值呢?第一次遇到断点时,类型为null。
UserManager
并遵循堆栈,可以看到主要声明在那里并且可以。
NULL
。
this
的范围内
最佳答案
这个问题花了一些时间解决,但是现在很清楚为什么会失败。 AppUserClaim
是真正的问题。很难说,在那一步过分地看着当地人,这就是为什么我不得不在这里走很长一段路。
我扩展的IdentityUserClaim<string>
是
public class AppUserClaim : IdentityUserClaim<string>
{
public int Id { get; set; }
/// <summary>
/// Gets or sets the primary key of the user associated with this claim.
/// </summary>
public virtual string UserId { get; set; }
public virtual AppUser user { get; set; }
/// <summary>
/// Gets or sets the claim type for this claim.
/// </summary>
public virtual string ClaimType { get; set; }
/// <summary>
/// Gets or sets the claim value for this claim.
/// </summary>
public virtual string ClaimValue { get; set; }
}
ClaimType
和
ClaimValue
的属性不需要重写。一旦完成此操作,它将在方法范围之外的地方设置值。将模型更改为
public class AppUserClaim : IdentityUserClaim<string> {
public virtual AppUser user { get; set; } // note this is the reason why i had to extend
}
关于c# - identitysever和AspNetUsers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52710862/
应用程序应该有客户和卖家以及另一个商品/项目表,第一种情况是扩展 AspNetUsers 并使其对客户和卖家都可用,并通过添加到 AspNetUsers 的一个字段来区分它们(例如可以将其命名为“Pr
我们正在尝试通过扩展AspNetUsers将Identity 3添加到我们现有的“客户”应用中 public class ApplicationUser : IdentityUser {
我使用身份模型创建了 Asp.Net Core 3.0 web Api 项目 (Identity.EntityFrameworkCore Version=3.1.3.0),现在我可以使用 api Co
我试图与 ASPNETUsers 表和我的自定义表建立关系。 ASPNetUsers 将包含注册的用户,然后管理员可以从用户列表中选择一个用户,然后该用户将成为员工。我还没有实现任何逻辑,因为我不知道
我开始学习 ASP.NET 并且我关注了 this教程。所以,我得到了一个简单的应用程序,它使用 ASP.NET Identity 成员资格系统,并有一个包含产品和购物车项目的附加数据库。 有没有办法
我需要向 dbo.AspNetUsers 添加几列。这是使用“个人帐户”选项创建的。我尝试了我在 Internet 上搜索到的内容,但无法正常工作。 在生成的 ApplicationDbContext
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
是否可以显示驻留在 AspNetUser 表中的散列密码?因为我有显示事件管理员的网格,当我单击一行时,我希望填充字段以进行编辑,其中一个字段用于密码。是否可以“取消散列”使用 PasswordHas
我非常想在 Identity 2.0 的 AspNetUsers 表和一个名为 Map 的自定义表之间创建一对多关系(一个用户可以有很多 map ,但一个 map 只能有一个用户)我已经尝试了大部分本
我想从身份表中检索数据 dbo.AspNetUsers , 但我还没有想出如何查询它。 这是我的数据库上下文: public class ProjectsDbContext : IdentityDbC
我有2个项目。其中一个使用 ASP.Net 身份验证,另一个使用 Windows 身份验证,这是管理端。我希望 Admin 项目能够管理另一个的用户。我可以修改除密码之外的所有内容。 如果我使用 Us
工作站设置: Windows 8.1 专业版 Visual Studio Pro 2013 v 12.0.40629.00 更新 5 .Net v 4.6.01055 背景: 我使用个人帐户身份验证创
我正在尝试使用存储过程填充 AspNetUsers 表,但出现以下错误: Msg 515, Level 16, State 2, Procedure Insert_Users, Line 36 Can
有几次,我需要获取 AplicationUsers (aspnetusers) 中的用户名。就像在 Chamado 模型(表)中一样,我有一列 Id_Agente(用户)。通过一个简单的列表,我会得到
我正在使用 asp.net MVC 和 mysql 数据库。我安装了 MySql.Data v8.0.16.0 和 MySql.Data.EntityFramework v8.0.16.0。 在 we
我上下查看,尝试了所有能够将 AspNetUser 表的外键存储在单独的 Customer 表中的各种不同方法。我在 ASP.NET 和 Entity Framework 方面还是个新手,但我已经阅读
我正在使用 Identity 3,我想在 AspNetUser 表中添加一些列。 我尝试先使用 EF Core Code 来完成它,它运行良好,但我需要先使用 DB。 我想知道,如果我在数据库中手动创
我正在使用 ASP.NET Core 创建的默认身份验证系统,我想知道? 如何更改名称ASPNETUsers表到User ? 如何将以下属性添加到表中:public string DisplayNam
我正在尝试重命名由 ASP.net Identity 2.0 生成的默认表名。我阅读了所有关于 stackoverflow 的文章、问题和答案,但我仍然遇到同样的错误。 我将这些表重命名为 Roles
使用 CodeFirst 迁移,我在 VS 2013 中的 asp mvc 模板中的标准数据库中的表 aspnetusers 中添加了自定义字段“姓氏”(对不起“in”)。如果我已登录,如何获取“姓氏
我是一名优秀的程序员,十分优秀!