我已经在我的MVC5网站上实现了Facebook和Twitter登录,并且一切正常。MVC oAuth登录 - 如何确定他们用于登录哪个社交帐户
我想要做的似乎很简单,但我不知道该怎么做。
我可以得到登录的用户名用户:
System.Web.HttpContext.Current.User.Identity.Name
不过,我想知道,如果用户使用Facebook或Twitter,并从相关的社交网络的登录ProviderKey。
希望这很容易做
谢谢。
我已经在我的MVC5网站上实现了Facebook和Twitter登录,并且一切正常。MVC oAuth登录 - 如何确定他们用于登录哪个社交帐户
我想要做的似乎很简单,但我不知道该怎么做。
我可以得到登录的用户名用户:
System.Web.HttpContext.Current.User.Identity.Name
不过,我想知道,如果用户使用Facebook或Twitter,并从相关的社交网络的登录ProviderKey。
希望这很容易做
谢谢。
您可以使用下面的方法获取所有外部登录信息。
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
在你的行动:
var getExternalLoginInfor = UserManager.GetLogins(User.Identity.GetUserId());
希望这有助于。
你可以从AuthenticationManager
的扩展方法GetExternalLoginInfo
得到它。
var loginInfo = AuthenticationManager.GetExternalLoginInfo();
if (loginInfo != null)
{
var externalProvider = loginInfo.Login.LoginProvider;
}
编辑: 在你ApplicationSignInManager : SignInManager
类重写方法SignInAsync
那里你可以externalLoginInfo并将其添加为一个要求
public override async Task SignInAsync(User user, bool isPersistent, bool rememberBrowser)
{
var userIdentity = await CreateUserIdentityAsync(user);
//
var logininfo = AuthenticationManager.GetExternalLoginInfo();
userIdentity.AddClaim(new Claim("ExternalLoginProvider", logininfo.Login.LoginProvider));
//
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie);
if (rememberBrowser)
{
var rememberBrowserIdentity = AuthenticationManager.CreateTwoFactorRememberBrowserIdentity(ConvertIdToString(user.Id));
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity, rememberBrowserIdentity);
}
else
{
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, userIdentity);
}
}
然后你就可以像这样访问:
var identity = (ClaimsIdentity)User.Identity;
var loginProvide = identity.FindFirst("ExternalLoginProvider").Value;
这似乎只在登录过程中起作用。如果稍后调用它,则loginInfo.Login为null。 – 2014-10-28 21:56:44
@AlwaysLearning更新了我的答案 – tmg 2015-01-28 13:08:13
嘿 - 感谢您的反馈。这给了我一个用户注册的所有登录的完整列表。但是,有没有办法让我知道他们当前登录了哪一个? – 2014-10-28 00:37:46
我不确定获取这些细节的简单方法,有人会帮助你。但是,如果是社交登录,则可以将提供者名称添加到声明中,并在上下文中使用它,并将其与getExternalLoginInfor进行比较。 http://stackoverflow.com/questions/20383955/how-to-add-claims-in-asp-net-identity – DSR 2014-10-28 01:20:24