如何防止用户使用特定用户名注册?

How to prevent users registering with specific usernames?

我正在使用 ASP.NET 身份验证方法,我想阻止我的用户使用某些用户名注册。我该如何防止这种情况发生?

是否有内置的方法将某些用户名的注册列入黑名单,或者最好只在控制器的 Register 方法中编写一些检查,以防止它们与列表中的任何用户名匹配时注册?

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {

// ************ Check the username aganist the list ***********
        var user = new ApplicationUser() { UserName = model.UserName };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            await SignInAsync(user, isPersistent: false);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            AddErrors(result);
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

希望对您有所帮助

因此 ASP.NET 身份验证服务中似乎没有内置功能来处理此问题,因此最好的解决方案是检查预定义的用户名列表并在以下情况下阻止注册有一场比赛。

Emil 的帮助下,我将在 Authentication ControllerRegister 方法中执行以下操作。

编辑:根据 Chris Pratt 的反馈,我们可以将错误消息添加到模型状态。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (constants.BannedUsernames.Contains(model.Username)
    {
        ModelState.AddModelError("Username", "That username has been taken, please try another username");
    }

    if (ModelState.IsValid)
    {
        // Continue with the existing code...
    }
}

然后我们需要存储被禁止的用户名列表,我已经有一个静态 class 来保存我在整个站点中使用的静态变量:

public static class constants
{
    public static List<string> BannedUsernames = new List<string>()
    {
        "admin",
        "superadmin"
        // whatver usernames you want to block
    };
}