Asp.net core SignInManager的CanSignInAsync(xyz)方法是如何工作的?

Asp.net core SignInManager的CanSignInAsync(xyz)方法是如何工作的?,asp.net-core,asp.net-core-identity,Asp.net Core,Asp.net Core Identity,在ASP.NET Core Identity中,SignInManager的CanSignInAsync(xyz)方法是如何工作的,它的真正用途是什么,以及它对自定义存储提供程序接口(例如IUserStore)实现的方法有何影响?从中,我们可以发现此方法可以帮助检查指定用户是否可以基于确认状态登录,如下图所示 public virtual async Task<bool> CanSignInAsync(TUser user) { if (Options.SignIn.Requ

在ASP.NET Core Identity中,SignInManager的
CanSignInAsync(xyz)
方法是如何工作的,它的真正用途是什么,以及它对自定义存储提供程序接口(例如IUserStore)实现的方法有何影响?

从中,我们可以发现此方法可以帮助检查指定用户是否可以基于确认状态登录,如下图所示

public virtual async Task<bool> CanSignInAsync(TUser user)
{
    if (Options.SignIn.RequireConfirmedEmail && !(await UserManager.IsEmailConfirmedAsync(user)))
    {
        Logger.LogWarning(0, "User {userId} cannot sign in without a confirmed email.", await UserManager.GetUserIdAsync(user));
        return false;
    }
    if (Options.SignIn.RequireConfirmedPhoneNumber && !(await UserManager.IsPhoneNumberConfirmedAsync(user)))
    {
        Logger.LogWarning(1, "User {userId} cannot sign in without a confirmed phone number.", await UserManager.GetUserIdAsync(user));
        return false;
    }
    if (Options.SignIn.RequireConfirmedAccount && !(await _confirmation.IsConfirmedAsync(UserManager, user)))
    {
        Logger.LogWarning(4, "User {userId} cannot sign in without a confirmed account.", await UserManager.GetUserIdAsync(user));
        return false;
    }
    return true;
}
公共虚拟异步任务CanSignInAsync(TUser用户)
{
if(Options.SignIn.requireconfirmedamail&!(等待UserManager.IsEmailConfirmedAsync(用户)))
{
Logger.LogWarning(0,“没有确认的电子邮件,用户{userId}无法登录。”,等待UserManager.GetUserIdAsync(User));
返回false;
}
if(Options.SignIn.RequireConfirmedPhoneNumber&!(等待UserManager.IsPhoneNumberConfirmedAsync(用户)))
{
Logger.LogWarning(1,“没有确认的电话号码,用户{userId}无法登录。”,等待UserManager.GetUserIdAsync(用户));
返回false;
}
if(Options.SignIn.RequireConfirmedAccount&&!(等待确认.IsConfirmedAsync(用户管理器,用户)))
{
LogWarning(4,“用户{userId}在没有确认帐户的情况下无法登录。”,等待UserManager.GetUserIdAsync(User));
返回false;
}
返回true;
}