gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:04:34 25 4
gpt4 key购买 nike

我正在使用带有最新版本身份 (2.1) 的 MVC5 我正在尝试为 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 block 中的身份表名称(例如 UserClaims),这似乎是一个相当标准的过程。

我有一种感觉,这将是一些菜鸟的举动,但此刻,我被难住了。非常感谢任何帮助。

最佳答案

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

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

await userManager.AddClaimAsync(userId, new Claim("MyClaimType", "MyClaimValue"));

如果您向 ClaimsIdentity 添加声明,则声明不会持久保存在数据库中,而是直接添加到 cookie 中,下次用户登录时不会自动重新添加。

关于c# - Identity 2.0 声明未添加到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31324769/

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