我使用的ASP.NET身份驗證方法,我想阻止我的用戶註冊某些用戶名。我如何防止這種情況發生?如何防止用戶使用特定用戶名註冊?
是否有內置黑名單來註冊某些用戶名的方法,或者最好只在控制器的Register方法中寫一些檢查來防止註冊,如果他們匹配列表中的任何用戶名?
我使用的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);
}
希望這有助於
我實際上將該支票移至「ModelState.IsValid」之前。然後,如果使用了無效的用戶名,你可以像'ModelState.AddModelError(「UserName」,「你不能使用它作爲用戶名」)。然後用戶自然會返回到表單來修復錯誤,並且實際上會被告知他們需要使用不同的用戶名。 –
所以這樣看來,有沒有內置在ASP.NET認證服務功能來處理這個問題,所以最好的解決辦法是要檢查一個預先定義的列表的用戶名和防止註冊,如果有一場比賽。
在Emil的幫助下,我將在Authentication Controller
的Register
方法中執行以下操作。
編輯:從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
};
}
當答案已經被回答時,回答自己的問題是一種很糟糕的形式,除非現有的答案太離譜以至於無關緊要。情況並非如此。如果你覺得需要改進或者不夠完善,你應該和@Emil一起改進他的答案,然後接受這個答案。 –
我對此表示歉意,我正在建立@Emil所提供的內容,並編寫可以執行檢查的代碼。我認爲這可能對那些不知道如何做到的人有用。我並不打算從Emil非常讚賞的幫助中減損。 – Ant
我會保持一個黑名單的用戶名和檢查反對註冊程序 – Emil
這就是我的想法,但想知道是否有這種事情的「最佳做法」。 – Ant
在帳戶控制器中註冊操作 – Emil