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(" UserName "、"あなたはそれをユーザ名として使用することはできません ")のようなことをすることができます。ユーザーはエラーを修正するためにフォームに自然に戻され、実際には別のユーザー名を使用する必要があると言われます。 –

0

を助けだから、何が内蔵されていますという機能がこれを処理するASP.NETの認証サービスには表示されなくなるので、最善の解決策は、事前に定義されたリストに対してチェックすることになります一致するものがあれば登録を防止します。

Emilの助けを借りて、私はの方法でAuthentication Controllerに次のようにしています。

編集: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... 
    } 
} 

その後、我々は、私はすでに、私は私のサイト全体で使用する静的変数を保持している静的クラス持って、禁止されたユーザ名のリストを格納する必要があります:私は黒の上場ユーザ名を維持し、それをチェックします

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

既存の回答がこれまでとはかけ離れていない限り、既に回答されているときに自分の質問に答えるのは悪い形です。ここではそうではありません。彼の答えを改善するためには@Emilと協力してください。改善が必要な場合や十分に完了していない場合は、その答えを受け入れてください。 –

+0

私は謝罪しました。私は@Emilが提供したものをベースにして、チェックを行うコードを書いていました。私は、それがどのようにするのかわからない人には役に立つかもしれないと考えました。私はEmilの非常に感謝している助けを損なうつもりはなかった。 – Ant

関連する問題