MVC oAuth登录 - 如何确定他们用于登录的社交帐户

时间:2014-10-27 23:00:00

标签: facebook twitter asp.net-mvc-5 asp.net-identity

我在我的MVC5网站上实施了Facebook和Twitter登录,一切运作良好。

我想做什么似乎引用简单,但我不知道该怎么做。

我可以使用以下命令获取登录用户的用户名:

System.Web.HttpContext.Current.User.Identity.Name

但是,我想知道该用户是使用Facebook或Twitter登录还是来自相关社交网络的ProviderKey。

希望这很容易做到

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法获取所有外部登录信息。

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}

在你的行动中:

var getExternalLoginInfor = UserManager.GetLogins(User.Identity.GetUserId());

希望这有帮助。

答案 1 :(得分:0)

您可以通过GetExternalLoginInfo的扩展程序AuthenticationManager获取它。

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;