如何检查通过身份验证的用户是否是常规ASP.NET身份帐户或链接到外部提供商的帐户

问题描述 投票:3回答:2

我需要这样的东西:

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”

asp.net-mvc asp.net-mvc-5 asp.net-identity
2个回答
0
投票

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

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

-1
投票

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

UserManager.GetUserLogins().Count == 0

请记住,用户可以取消其帐户的链接,也可以通过管理页面链接帐户,因此他们不一定会随着时间的推移而停留在同一存储桶中...

© www.soinside.com 2019 - 2024. All rights reserved.