Asp .net使用不同的电子邮件识别多个登录

时间:2015-11-10 20:27:03

标签: .net asp.net-identity-2

我在使用.net身份时遇到了一些麻烦,因为我想链接多个社交帐户,即使他们没有相同的电子邮件。
我理想的工作流程是。我与其中一个外部提供商登录,之后,在我的个人资料页面上,我将链接我的其他社交帐户 问题是用户身份类是通过一封电子邮件修复的,我也无法覆盖用户登录类来添加电子邮件。
任何想法?
谢谢!

2 个答案:

答案 0 :(得分:0)

默认情况下,通过OAuth / OpenId分配Identity Providerd不会发回用户的电子邮件地址。因此,您必须为电子邮件添加一个Oauth / OpenId声明请求,或者提示用户输入该提供商的电子邮件地址。话虽如此,您不应该需要来自各个提供商的电子邮件,因为您通过OAuth / OpenId提供商识别用户的方式是通过存储在AspNetUserLogins表中的提供者密钥。

用于asp身份的模式是你有一个用户对象,可选择有一个电子邮件地址,然后通过在AspNetUserLogins表中存储来自该提供者的唯一用户ID来添加登录提供者,例如facebook / gmail / etc回到用户。所以默认情况下你不应该有facebook / gmail / etc的电子邮件。

就我个人而言,我没有使用以下ASP.NET Identity Tutorial,但从快速浏览一下,看起来它可以帮助您了解如何使用身份提供商。

答案 1 :(得分:0)

我将Identity基类扩展为在Login表中包含Email属性,然后改进声明要求OAuth提供商要求发送电子邮件。

每个新的社交登录我都记录了所使用的电子邮件,这使我们能够自动合并同一电子邮件的帐户。例如,通过注册Google然后忘记并注册Facebook,我们可以节省您的时间,只需将FB登录添加到您现有的帐户中,然后就可以了,不会有噩梦突然出现空白帐户。

我们没有排序的是你问题的另一半,有多个Email和Pass。我想最懒的方式是将Visitor / AspNetUser扩展为父访问者。然后当用户注册第二封电子邮件/通行证时,他们将能够访问他们的一个合并帐户。但用例非常有限;我认为最好将用户限制为一个电子邮件/通行证,无限社交,如果他们合并帐户,让他们选择他们希望最终帐户使用哪个电子邮件。