Identity 2.0声明未添加到数据库中
我正在使用MVC5和最新版本的Identity(2.1)我正在尝试为facebook access_token创建用户声明。 我之前从未创建过声明,但据我所知,我的其他身份function正常工作。
我在Startup.Auth.cs中有这行代码:
context.Identity.AddClaim(new Claim("urn:facebook:access_token", context.AccessToken, xmlSchemaString, "Facebook"));
如果您需要更多参考,那么完整的代码就在这里: 将facebooksdk与Identity 2.0集成
如果我在该行之后的行中的代码中放置一个中断,我可以看到所有内容都被正确检索,最重要的是content.AccessToken
(这是一个巨大的字符串)。 但是,在完成成功登录后,它永远不会进入数据库。
作为测试,我尝试通过将行更改为此来简化它:
context.Identity.AddClaim(new System.Security.Claims.Claim(ClaimTypes.Email, "test@example.com"));
结果相同,没有错误,但没有任何内容添加到数据库中。 然后我尝试在IdentityModels.cs中添加这行代码,它告诉您放置自定义声明:
// Add custom user claims here userIdentity.AddClaim(new Claim(ClaimTypes.DateOfBirth, "01/01/1972"));
相同的结果……没有错误,也从未进入数据库。 任何人都可以想到我的问题可能是什么原因吗?
我的身份设置中唯一自定义的是我关于如何使用用户名而不是电子邮件(作为用户名)的文章。 此外,我在OnModelCreating
块中更改了Identity表名称(例如UserClaims),这似乎是一个相当标准的过程。
我有一种感觉,这将是一些新手的举动,但此刻,我很难过。 任何帮助深表感谢。
数据库会保留用户的自定义声明。 如果用户在数据库中有任何声明,则他们将在登录时应用于身份validationcookie。
要将声明添加到数据库,您需要使用UserManager
:
await userManager.AddClaimAsync(userId, new Claim("MyClaimType", "MyClaimValue"));
如果要向ClaimsIdentity
添加声明,则声明不会ClaimsIdentity
在数据库中,而是直接添加到cookie中,并且在用户登录时不会自动重新添加声明。
所以你的问题是没有命中数据库来保存声明? 声明存储在带有ASP.NET标识的安全cookie中; )ASP.NET Identity Framework将在每个请求开始时读取cookie,并在我的理解中为您填充声明集合。 只需检查您在登录后可以从MVC控制器上看到facebook声明。 我认为实际上没有问题。
- 如何首先使用代码在已创建的数据库中创建ASP.net身份表?
- 如何正确实现其他实体对Identity用户的引用?
- 通过ASP.NET身份2中的UserManager.Update()更新用户
- 检查用户是否在asp.net mvc Identity中扮演角色
- ASP标识表列更改,但新列名称无法进行映射
- 在Identity Framework的方法中,HttpContext.Current为null
- ASP.NET身份,立即将另一个用户添加到角色(他们不必再次注销)
- InvalidOperationException:无法为“Role”创建DbSet,因为此类型未包含在上下文的模型中
- 动态添加角色以授权控制器的属性