【问题标题】:Return all rows of AspNetUserClaims - get every claim in application?返回 AspNetUserClaims 的所有行 - 获取应用程序中的每个声明?
【发布时间】:2014-04-30 23:28:16
【问题描述】:

使用 OWIN 身份验证的 ASP .NET 身份 - 我想做以下事情: 用户应该能够创建他们喜欢的用户名。电子邮件虽然是一个声明,但应该是唯一的 - 考虑以下场景。

用户首先在本地注册。用户决定在第二次访问时使用 FB 或 Google 登录。通过确定 OAUTH 范围,我检索了他们的 FB/Google 注册电子邮件。 在这一点上,我想: 1. 查看该特定电子邮件是否存在索赔。 2. 检索与该电子邮件关联的用户 ID。 3. 在 AspNetUserLogins 表中为该特定用户和他/她的特定提供者插入一个新行。

这样,除非用户在 site/fb/google 上使用了不同的电子邮件,否则他们将能够使用所有 3 个电子邮件登录同一个用户个人资料。

但要做到这一点,我需要以某种方式检索所有声明。我已经通过 ApplicationDbContext 和 IdentityDbContext 进行了尝试,但我没有找到声明的映射。只有用户和声明似乎与用户相关。

有没有办法检索数据库中的所有声明? (或者也许有人可以建议我用一种不同的、更方便的方式来做这件事。)

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    更新

    我解决此问题的方法是在我的项目中添加一个新模型项,该模型项映射到声明表并对其进行查询。 也许不是最干净的解决方案,但它似乎工作正常!

    【讨论】:

    • 为什么不直接使用电子邮件地址作为用户名?这就是我所做的,然后当有人使用 Facebook 登录(例如)时,我会根据现有用户检查电子邮件地址,如果 Facebook 电子邮件匹配,它们就会链接在一起。我认为根本不需要额外的视图。
    • 我希望我的用户能够选择他们认为合适的登录名:(
    • AspNet.Identity v2 在用户表中包含一个电子邮件列。你可以用那个...
    • 我没见过,我只在索赔表中见过一个。但是我在 ApplicationUser 中附加了一个 Email 属性,这就是我最终所做的。 :) 感谢您的评论。
    猜你喜欢
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 2019-05-13
    • 2015-06-19
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多