小编pha*_*lan的帖子

Asp.NET Identity Custom SignInManager

在我的应用程序中,我想添加其他条件以便用户登录.例如,出于某种原因,允许管理员"锁定"用户帐户.当帐户被锁定时,用户无法登录.请注意,由于多次登录尝试失败,这与"锁定"不同.管理员可以删除锁定条件.

我看到默认模板创建了一个派生自默认值的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标识定义.我无法修改以返回任何其他内容,以传达登录可能失败的正当理由.

谁能为此提供良好的解决方案?

c# asp.net asp.net-mvc asp.net-identity

13
推荐指数
1
解决办法
3万
查看次数

防止未定义的宏

在C和C++中,使用像这样的宏:

#if ( 1 == __MY_MACRO__ )
// Some code
#endif
Run Code Online (Sandbox Code Playgroud)

如果未定义MY_MACRO,编译器将无法捕获并将其视为0.当代码的设计旨在使宏必须定义(非零)时,这可能会导致许多隐藏的错误.

有没有让编译器报告这个,即使编译器本身不寻找这样的东西?

c c++ macros c-preprocessor

2
推荐指数
2
解决办法
1557
查看次数

标签 统计

asp.net ×1

asp.net-identity ×1

asp.net-mvc ×1

c ×1

c# ×1

c++ ×1

c-preprocessor ×1

macros ×1