pha*_*lan 13 c# asp.net asp.net-mvc asp.net-identity
在我的应用程序中,我想添加其他条件以便用户登录.例如,出于某种原因,允许管理员"锁定"用户帐户.当帐户被锁定时,用户无法登录.请注意,由于多次登录尝试失败,这与"锁定"不同.管理员可以删除锁定条件.
我看到默认模板创建了一个派生自默认值的ApplicationSignInManager.
public class ApplicationSignInManager : SignInManager<User, string>
Run Code Online (Sandbox Code Playgroud)
来自"帐户"控制器的"登录"操作调用
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Run Code Online (Sandbox Code Playgroud)
所以我的尝试是覆盖这个功能
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);
}
Run Code Online (Sandbox Code Playgroud)
这有两个问题.首先,假设"userName"对每个用户都是唯一的.虽然,这可以安全地假设.
其次,该函数实际上返回一个SignInStatus,它由Asp.net标识定义.我无法修改以返回任何其他内容,以传达登录可能失败的正当理由.
谁能为此提供良好的解决方案?
tra*_*max 14
为什么不创建另一种方法而不是覆盖?您的方法将返回您需要知道的任何内容 - 返回对象,该对象将知道帐户是否实际登录或由管理员禁用(我认为"禁用"是一个更好的名称 - 避免混淆).并更改您的控制器以使用您的新方法而不是标准PasswordSignIn.
关于用户名唯一性 - 是的,用户名是唯一的 - 这是用户登录的唯一方式.否则,如果有2个帐户具有相同的用户名,系统将如何知道尝试密码的帐户?
| 归档时间: |
|
| 查看次数: |
25724 次 |
| 最近记录: |