如何检查经过身份验证的用户是常规ASP.NET标识帐户还是链接到外部提供程序的帐户

时间:2013-12-19 13:16:16

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

我需要这样的东西:

if (Request.IsAuthenticated)
{
    var user = await AccountManager.UserManager.FindByIdAsync(User.Identity.GetUserId());

    if (user != null)
    {
        if (regular account)
        {
             // do this
        }

        if (external provider account)
        {
             // do that
        }
    }
}

我在调试器中发现了这个,但我不知道这是否适合用于检查?

user.Logins.FirstOrDefault().LoginProvider

返回“Google”

2 个答案:

答案 0 :(得分:0)

因此,所有用户都可以拥有密码和外部登录。新用户从google / facebook返回后,系统会提示他们创建本地用户(与登录相关联)。如果您想测试用户只有密码而没有其他登录的情况,您可以查看用户是否有任何关联登录。

UserManager.GetUserLogins().Count == 0

请注意,用户可以取消其帐户的关联,还可以通过管理页面关联帐户,这样他们就不会随着时间的推移而停留在同一个存储桶中...

答案 1 :(得分:0)

对于那些期待的人,可以在ASP.NET Core 3.1中询问用户管理器用户是否具有密码:

var user = await UserManager.GetUserAsync(User).ConfigureAwait(false);
var hasPassword = await UserManager.HasPasswordAsync(user).ConfigureAwait(false);