在Asp.Net Identity中自定义用户登录信息

4

Asp.Net Identity中的UserLoginInfo是一个密封类,只有两个属性:

LoginProvider和ProviderKey

我想要添加一个额外的信息(比如邮箱),这样用户在管理他们的SSO关联时就更加容易理解了。

例如,如果您尝试使用Google登录,在“管理账户”页面上会看到:

Provider: Google
ProviderKey: https://www.google.com/accounts/o8/id?id=AItOawkmqLbSJXXXXXXXXXXXXX--c

从管理的角度来看,这并没有多大意义。你有什么建议吗?
1个回答

1
那个类只是作为强类型的“Pair”用于内置的用户管理器API,这些API原本需要字符串提供程序和字符串提供程序键。如果您想了解更多信息,可以直接在应用程序中检索它,或者如果您想构建更可重用的内容,则可以从UserManager派生并添加返回适合您需求的新API。

谢谢您的回复,我明白我可以自己编写所有代码来实现我想要的功能。然而,如果不必要地重新发明轮子,我更愿意避免这样做。在这种情况下似乎没有其他选择,因为GetExternalLoginInfo扩展只返回ExternalLoginInfo,并且硬编码使用UserLoginInfo。 - BlueFox
1
在下一个版本中,将会有一个ExternalIdentity属性,它挂在ExternaLoginInfo上,映射到外部登录提供程序生成的ClaimsIdentity。这应该足以让您提取外部提供程序返回的任何数据。因此,您可以通过extLoginInfo.ExternalIdentity提取电子邮件。 - Hao Kung
1
我明白了,感谢您的更新。是否也可以使UserManager接受可配置的IUserLoginInfo存储?这样,外部登录数据(电子邮件)就可以与UserLoginInfo一起存储,因为将此数据与IUser存储在一起没有意义。 - BlueFox
@BlueFox 从外部登录中检索到的任何信息都可以存储为声明。您可以扩展这些声明,使其包含每个声明的提供者信息。 - jd4u

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接