0

Я использую методы проверки подлинности ASP.NET, и я хочу, чтобы мои пользователи не регистрировались с определенными именами пользователей. Как я могу предотвратить это?Как запретить пользователям регистрироваться с определенными именами пользователей?

Есть ли метод, встроенный в черный список регистрации определенных имен пользователей, или лучше всего просто написать некоторые проверки в методе Register в контроллере, чтобы предотвратить регистрацию, если они соответствуют любым именам пользователей в списке?

+0

Я поддерживать черный список имен пользователей и проверить его против процесса регистрации – Emil

+0

Вот что я думал, но задавался вопросом, была ли «лучшая практика» для такого рода вещей. – Ant

+0

Зарегистрировать действие в контроллере счета – Emil

ответ

2
[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); 
} 

Надеется, что это помогает

+2

Я бы переместил эту проверку до 'ModelState.IsValid'. Затем, если было использовано недопустимое имя пользователя, вы можете сделать что-то вроде «ModelState.AddModelError» («Имя пользователя», «Вы не можете использовать это как имя пользователя»). Затем пользователь, естественно, будет возвращен в форму, чтобы исправить ошибки, и на самом деле будет сказано, что им нужно использовать другое имя пользователя. –

0

Так, казалось бы, что там нет встроенной функциональности в службах ASP.NET авторизаций, чтобы справиться с этим, поэтому лучшим решением будет проверять против заранее определенного списка от имени пользователя и предотвратить регистрацию, если есть совпадение.

С помощью Emil, я буду делать следующее в своем методе Register в Authentication Controller.

EDIT: после обратной связи от Chris Pratt, мы можем добавить сообщение об ошибке в modelstate.

[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... 
    } 
} 

Затем нам нужно хранить список запрещенных имен пользователей, у меня уже есть статический класс, который содержит статические переменные, которые я использую на протяжении всего моего сайта:

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

Это своего рода плохая форма, чтобы ответить на ваш собственный вопрос, когда на это уже был дан ответ, если существующие ответы так далеко не имеют значения, что они не имеют значения. Здесь дело не в этом. Вам следует работать с @Emil, чтобы улучшить его ответ, если вы считаете, что ему нужно улучшить или недостаточно полно, и затем принять этот ответ. –

+0

Приношу свои извинения, я основывался на том, что @Emil предоставил и написал код, который будет делать чек. Я подумал, что это может быть полезно тем, кто не знает, как это сделать. Я не собирался умалять очень ценную помощь Эмиля. – Ant

Смежные вопросы

 Смежные вопросы