在我的應用程序中,我想添加其他條件以便用戶登錄。例如,出於某種原因,管理員被允許「鎖定」用戶帳戶。當帳戶被鎖定時,用戶無法登錄。請注意,由於多次登錄嘗試失敗,因此「鎖定」不同。管理員可以刪除鎖定條件。Asp.NET身份自定義SignInManager
我看到默認模板創建了一個派生自默認值的ApplicationSignInManager。
public class ApplicationSignInManager : SignInManager<User, string>
從 「賬戶」 控制器 「登錄」 行動呼籲
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
所以我的嘗試是超越此功能
public override async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
{
User user = this.UserManager.FindByName(userName);
if (null != user)
{
if (true == user.AccountLocked)
{
return (SignInStatus.LockedOut);
}
}
var result = await base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);
return (result);
}
有2個問題與此有關。首先,這假定「userName」對每個用戶都是唯一的。雖然這可以安全地假設。
其次,函數實際返回一個SignInStatus,它由Asp.net標識定義。我無法修改返回其他任何內容,以表明登錄可能失敗的正確原因。
任何人都可以提供很好的解決方案嗎?