gpt4 book ai didi

asp.net-mvc-5 - 存储未实现 IUserLockoutStore

转载 作者:行者123 更新时间:2023-12-02 03:16:43 33 4
gpt4 key购买 nike

我正在尝试为 asp.net Identity 2.0 实现自己的 DAL,并提供我需要的功能。我不需要帐户锁定功能。但是当我尝试打电话时

var result = await SignInManager.PasswordSignInAsync(model.Login, model.Password, model.RememberMe, shouldLockout: false);

我得到System.NotSupportedException:Store does not implement IUserLockoutStore<TUser>.

如果我不需要的话,为什么我需要实现 IUserLockoutStore 呢?

最佳答案

查看这个答案:When implementing your own IUserStore, are the "optional" interfaces on the class actually optional?

您需要欺骗或重写您尝试在存储中调用的方法,以实现不使用“可选”锁定存储的方法。

您可能会惊讶地发现您还需要实现双因素的“可选”接口(interface)。使用下面相同的答案来执行此操作,除非您确实有双因素的方法。

首先,这是默认实现:

public virtual async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
...
if (await UserManager.IsLockedOutAsync(user.Id).WithCurrentCulture())
{
return SignInStatus.LockedOut;
}
if (await UserManager.CheckPasswordAsync(user, password).WithCurrentCulture())
{
return await SignInOrTwoFactor(user, isPersistent).WithCurrentCulture();
}
...
return SignInStatus.Failure;
}

一个答案:创建无用的商店。

    #region LockoutStore
public Task<int> GetAccessFailedCountAsync(MyUser user)
{
throw new NotImplementedException();
}

public Task<bool> GetLockoutEnabledAsync(MyUser user)
{
return Task.Factory.StartNew<bool>(() => false);
}

public Task<DateTimeOffset> GetLockoutEndDateAsync(MyUser user)
{
throw new NotImplementedException();
}

public Task<int> IncrementAccessFailedCountAsync(MyUser user)
{
throw new NotImplementedException();
}

public Task ResetAccessFailedCountAsync(MyUser user)
{
throw new NotImplementedException();
}

public Task SetLockoutEnabledAsync(MyUser user, bool enabled)
{
throw new NotImplementedException();
}

public Task SetLockoutEndDateAsync(MyUser user, DateTimeOffset lockoutEnd)
{
throw new NotImplementedException();
}
#endregion
}

另一个解决方案:重写以不使用它。

public virtual async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
...
if (false)
{
return SignInStatus.LockedOut;
}
if (await UserManager.CheckPasswordAsync(user, password).WithCurrentCulture())
{
return await SignInOrTwoFactor(user, isPersistent).WithCurrentCulture();
}
...
return SignInStatus.Failure;
}

cf/https://github.com/aspnet/AspNetIdentity/blob/master/src/Microsoft.AspNet.Identity.Owin/SignInManager.cs

关于asp.net-mvc-5 - 存储未实现 IUserLockoutStore<TUser>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30957060/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com