。net Core 3身份'AccessFailedCount'不增加

问题描述 投票:0回答:1

我对asp.net Core 3身份项目有问题。我创建了自定义UserStoreRoleStore以使用Dapper而不是Entity Framework。多数似乎工作正常,除非尝试登录失败,否则数据库中的AccessFailedCount不会递增。我已经遍历了代码,并找到了逻辑失败的地方。在名为SignInManagerCheckPasswordSignInAsync方法中,在此块中:

if (UserManager.SupportsUserLockout && lockoutOnFailure)
{
    // If lockout is requested, increment access failed count which might lock out the user
    await UserManager.AccessFailedAsync(user);
    if (await UserManager.IsLockedOutAsync(user))
    {
        return await LockedOut(user);
    }
}

UserManager.SupportsUserLockout的值为false,因此它永远不会达到AccessFailedAsync方法。但我不确定该值来自何处。 UserManager.SupportsUserLockoutUserManager的代码块为:

public virtual bool SupportsUserLockout
{
  get
  {
    this.ThrowIfDisposed();
    return this.Store is IUserLockoutStore<TUser>;
  }
}

但是我不知道在这里将其设置为false吗?这个值从哪里来?

asp.net-core asp.net-identity
1个回答
0
投票

我想我遇到了您的问题,您尚未实现IUserLockoutStore<TUser>接口。由于您没有使用实体框架,因此您需要实现所有必要的存储。下面是您需要实现的功能。

Task<int> GetAccessFailedCountAsync(TUser user, CancellationToken cancellationToken);
Task<bool> GetLockoutEnabledAsync(TUser user, CancellationToken cancellationToken);
Task<DateTimeOffset?> GetLockoutEndDateAsync(TUser user, CancellationToken cancellationToken);
Task<int> IncrementAccessFailedCountAsync(TUser user, CancellationToken cancellationToken);
Task ResetAccessFailedCountAsync(TUser user, CancellationToken cancellationToken);
Task SetLockoutEnabledAsync(TUser user, bool enabled, CancellationToken cancellationToken);
Task SetLockoutEndDateAsync(TUser user, DateTimeOffset? lockoutEnd, CancellationToken cancellationToken);

一旦实现IUserLockoutStore<TUser>接口,您必须为单个用户启用锁定功能,以实现只需要在User.LockoutEnabled = 1 (true)表中设置AspNetUsers

我希望这能解决您的问题!

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