条件允许匿名

Conditional AllowAnonymous

个人账号asp.netmvc6默认模板在AccountController

中有以下方法
// GET: /Account/Register
[HttpGet]
[AllowAnonymous]
public IActionResult Register()
{
    return View();
}

//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Register(RegisterViewModel model) {
    ...
}

我想实现一些简单的东西,允许匿名访问Register方法仅当没有用户时已经注册了。

是否 ok/good 扩展 AllowAnonymous 过滤器以便它在返回之前对 Db 进行检查 true/false 或者我应该以某种方式实施策略?

如果扩展属性或使用自定义策略都不是好的解决方案,您有什么建议?

如果有人能用 where/how 上的示例指导我使用自定义逻辑,那就太好了。

这个想法是针对管理部分的,所以只有注册用户不能注册新用户。但是如果没有用户注册(首先部署在空数据库上),我希望用户能够注册 username/password.

安全方面的注意事项:请记住,只能注册特定域的电子邮件,因此即使随机用户在没有用户注册的情况下点击 public 人脸注册页面,它将无法使用 his/her 自己的个人电子邮件地址

进行注册

如果我应该考虑任何额外的安全考虑,我愿意阅读它们。

因为这只是一次性的事情,所以我会 运行 直接在 Register 中检查。创建自定义属性来装饰单个操作方法太过分了。

[HttpGet]
[AllowAnonymous]
public IActionResult Register()
{
    if (db.Users.Any())
    {
        return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
    }

    return View();
}

从技术上讲,由于您的 post 操作受 CSRF 保护,因此如果不先点击 get 操作就无法成功完成 post,但为了彻底,您可以添加代码如果你愿意,两者都可以。