我正在使用MVC5和最新版本的Identity(2.1)我正在尝试为facebook access_token创建用户声明。我之前从未创建过声明,但据我所知,我的其他身份功能正常工作。
我在Startup.Auth.cs中有这行代码:
context.Identity.AddClaim(new Claim("urn:facebook:access_token",
context.AccessToken, xmlSchemaString, "Facebook"));
如果您需要更多参考,请填写完整的代码:Integrate facebooksdk with 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
块中的标识表名称(例如UserClaims),这似乎是一个相当标准的过程。
我有一种感觉,这将是一些菜鸟的举动,但此刻,我很难过。非常感谢任何帮助。
答案 0 :(得分:12)
数据库会保留您对用户的自定义声明。如果用户在数据库中有任何声明,则他们将在登录时应用于身份验证cookie。
要将声明添加到数据库,您需要使用UserManager
:
await userManager.AddClaimAsync(userId, new Claim("MyClaimType", "MyClaimValue"));
如果要向ClaimsIdentity
添加声明,则声明不会保留在数据库中,而是直接添加到Cookie中,并且在用户登录后不会自动重新添加声明。
答案 1 :(得分:0)
所以你的问题是没有命中数据库来保存声明?声明存储在带有ASP.NET标识的安全cookie中; )ASP.NET Identity Framework将在每个请求开始时读取cookie,并在我的理解中为您填充声明集合。只需检查您在登录后可以从MVC控制器上看到facebook声明。我认为实际上没有问题。