我已經在我的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