Identity 2.0声明未添加到数据库中

Sum*_*one 6 c# asp.net-mvc asp.net-identity

我正在使用MVC5和最新版本的Identity(2.1)我正在尝试为facebook access_token创建用户声明.我之前从未创建过声明,但据我所知,我的其他身份功能正常工作.

我的Startup.Auth.cs中有这行代码:

    context.Identity.AddClaim(new Claim("urn:facebook:access_token",
 context.AccessToken, xmlSchemaString, "Facebook"));
Run Code Online (Sandbox Code Playgroud)

如果您需要更多参考,那么完整的代码就在这里:将facebooksdk与Identity 2.0集成

如果我在该行后面的行中的代码中断,我可以看到所有内容都被正确检索,最重要的是content.AccessToken(这是一个巨大的字符串).但是,在完成成功登录后,它永远不会进入数据库.

作为测试,我尝试通过将行更改为此来简化它:

context.Identity.AddClaim(new System.Security.Claims.Claim(ClaimTypes.Email, "test@example.com"));
Run Code Online (Sandbox Code Playgroud)

结果相同,没有错误,但没有任何内容添加到数据库中.然后我尝试在IdentityModels.cs中添加这行代码,它告诉您放置自定义声明:

// Add custom user claims here
        userIdentity.AddClaim(new Claim(ClaimTypes.DateOfBirth, "01/01/1972"));
Run Code Online (Sandbox Code Playgroud)

相同的结果......没有错误,永远不会进入数据库.任何人都可以想到我的问题可能是什么原因吗?

我的身份设置中唯一自定义的是我关于如何使用用户名而不是电子邮件(作为用户名)的文章.此外,我更改了块中的标识表名称(例如UserClaims),OnModelCreating这似乎是一个相当标准的过程.

我有一种感觉,这将是一些菜鸟的举动,但此刻,我很难过.任何帮助深表感谢.

tra*_*max 12

数据库会保留用户的自定义声明.如果用户在数据库中有任何声明,则他们将在登录时应用于身份验证cookie.

要将声明添加到数据库,您需要使用UserManager:

await userManager.AddClaimAsync(userId, new Claim("MyClaimType", "MyClaimValue"));
Run Code Online (Sandbox Code Playgroud)

如果要添加声明ClaimsIdentity,则声明不会保留在数据库中,而是直接添加到cookie中,并且在用户登录时不会自动重新添加声明.

  • 所以只是为了澄清一下,看起来userIdentity.AddClaim()向用户_in context_添加了一个声明,但是没有将它持久保存到数据库中.userManager.AddClaim()向数据库添加声明,但不向当前用户上下文添加声明.前者适用于测试,后者适用于声明创建和持久性. (3认同)