2015-10-20 149 views
1

我有多个登录提供程序可用。我可以使用外部帐户登录或使用表单身份验证。一切正常。 我将用户重定向到HomePage,现在我想知道使用了哪个登录提供程序。OWIN MVC - 多登录提供程序,当前登录提供者

是否有可能在控制器中找到哪个loginprovider被使用?

感谢您的帮助!

+0

为什么你想知道登录提供程序? – jrummell

+0

我有异常登录,其中我想包括登录时使用哪个登录提供程序的信息。另外就像在当前登录的用户附近显示图标图标 –

回答

0
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 
string provider = loginInfo.Login.LoginProvider; // Facebook, Google, Twitter, Microsoft... 
+0

这只适用于ExternalLoginCallback请求。在其他请求externallogininfo为空,所以我不能在任何控制器操作中使用它。 –

+0

@PiotrDory如果您捕获ExternalLoginCallback中的登录信息,并且可以将其存储在Session中,稍后可以访问它。我没有尝试过,但听起来似乎是合理的。 – jrummell

+0

这还不够:/可以用已经登录的用户开始新的会话 –

0

我得到了这个工作,虽然它不是在所有情况下都能工作的东西。

这是我在HomeController的功能使用的代码:

// get the provider name 
var authCtx = HttpContext.GetOwinContext(); 
var usrMgr = authCtx.GetUserManager<ApplicationUserManager>(); 
var user = usrMgr.FindByName(HttpContext.User.Identity.Name); 
var extLoginInfo = usrMgr.GetLogins(user.Id).FirstOrDefault(); 
var loginProvider = extLoginInfo.LoginProvider.ToLower(); 

主要的问题在这里的是,我没有得到该用户当前登录与实际登录提供。我只是获得与此用户关联的第一个登录提供程序(在我的情况下恰好是相同的,所以它的工作原理)。

很好找到一种方法来获取用户当前登录的实际提供者。

相关问题