如何在 ASP.NET Core 2.0 MVC 应用程序的 HomeController 中获取当前外部提供程序
How to get the current external provider in HomeController of ASP.NET Core 2.0 MVC application
我正在使用个人帐户创建 ASP.NET Core 2.0 MVC。 Google 并且 Microsoft 身份验证工作正常。现在我用它来访问 Google 和 Microsoft 帐户中的数据(这发生在 HomeController 中)。如果我知道要使用哪个提供商,我就可以做到这一点。
在 AccountController 中,有关当前使用的提供商(例如 Google、Microsoft)的信息是开箱即用的。
但是这个信息不会持续存在,所以我不能在 HomeController 中使用它。 signInManager.GetExternalLoginInfoAsync()
returns 从 HomeController 访问时为空。
我可以自己将其保存到一些持久存储中(通过更改 AccountController.ExternalLoginCallback
),但这可能是多余的,因为有一种 correct/recommended 方法可以通过其他方式获取当前提供者?或者让 signInManager.GetExternalLoginInfoAsync
在 HomeController 中工作。
注意:讨论 "signInManager.GetExternalLoginInfoAsync is null" 有很多问题,但它们是关于另一种情况,即使在 AccountController 中它也为空(通常是由于外部提供者的配置不正确)。我的情况不同,signInManager.GetExternalLoginInfoAsync
在那里工作正常。
使用外部提供商登录时,SignInManager
将 http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod
类型的声明添加到 ClaimsPrincipal
(source)。您可以读取此值以确定 sign-in.
使用了哪个提供程序
这里有一些示例代码,您应该可以按原样插入到您的 HomeController
中:
var externalProvider = User.FindFirstValue(ClaimTypes.AuthenticationMethod);
我正在使用个人帐户创建 ASP.NET Core 2.0 MVC。 Google 并且 Microsoft 身份验证工作正常。现在我用它来访问 Google 和 Microsoft 帐户中的数据(这发生在 HomeController 中)。如果我知道要使用哪个提供商,我就可以做到这一点。
在 AccountController 中,有关当前使用的提供商(例如 Google、Microsoft)的信息是开箱即用的。
但是这个信息不会持续存在,所以我不能在 HomeController 中使用它。 signInManager.GetExternalLoginInfoAsync()
returns 从 HomeController 访问时为空。
我可以自己将其保存到一些持久存储中(通过更改 AccountController.ExternalLoginCallback
),但这可能是多余的,因为有一种 correct/recommended 方法可以通过其他方式获取当前提供者?或者让 signInManager.GetExternalLoginInfoAsync
在 HomeController 中工作。
注意:讨论 "signInManager.GetExternalLoginInfoAsync is null" 有很多问题,但它们是关于另一种情况,即使在 AccountController 中它也为空(通常是由于外部提供者的配置不正确)。我的情况不同,signInManager.GetExternalLoginInfoAsync
在那里工作正常。
使用外部提供商登录时,SignInManager
将 http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod
类型的声明添加到 ClaimsPrincipal
(source)。您可以读取此值以确定 sign-in.
这里有一些示例代码,您应该可以按原样插入到您的 HomeController
中:
var externalProvider = User.FindFirstValue(ClaimTypes.AuthenticationMethod);