- ASP.NET Core 教程
- ASP.NET Core - 首頁
- ASP.NET Core - 概述
- ASP.NET Core - 環境設定
- ASP.NET Core - 新建專案
- ASP.NET Core - 專案佈局
- ASP.NET Core - Project.Json
- ASP.NET Core - 配置
- ASP.NET Core - 中介軟體
- ASP.NET Core - 異常
- ASP.NET Core - 靜態檔案
- ASP.NET Core - 設定 MVC
- ASP.NET Core - MVC 設計模式
- ASP.NET Core - 路由
- ASP.NET Core - 屬性路由
- ASP.NET Core - 操作結果
- ASP.NET Core - 檢視
- 設定 Entity Framework
- ASP.NET Core - DBContext
- ASP.NET Core - Razor 佈局檢視
- ASP.NET Core - Razor 檢視啟動
- ASP.NET Core - Razor 檢視匯入
- ASP.NET Core - Razor 標籤助手
- ASP.NET Core - Razor 編輯表單
- ASP.NET Core - 身份概述
- ASP.NET Core - 授權屬性
- 身份配置
- ASP.NET Core - 身份遷移
- ASP.NET Core - 使用者註冊
- ASP.NET Core - 建立使用者
- ASP.NET Core - 登入和登出
- ASP.NET Core 有用資源
- ASP.NET Core - 快速指南
- ASP.NET Core - 有用資源
- ASP.NET Core - 討論
ASP.NET Core - 建立使用者
在本節中,我們將討論如何建立使用者。要繼續執行此操作,我們需要與 Identity 框架互動以確保使用者有效,然後建立該使用者,然後繼續登入他們。
Identity 框架有兩個核心服務,一個是UserManager,另一個是SignInManager。
我們需要將這兩個服務都注入到我們的控制器中。這樣,當我們需要建立使用者或登入使用者時,就可以呼叫相應的 API。
讓我們為 SignInManager 和 UserManager 新增私有變數,然後在您的 AccountController 中新增一個建構函式,它將採用兩個引數 UserManager 型別為 User,SignInManager 型別為 User。
private SignInManager<User> _signManager;
private UserManager<User> _userManager;
public AccountController(UserManager<User> userManager, SignInManager<User> signManager){
_userManager = userManager;
_signManager = signManager;
}
我們將繼續使用 AccountController 的 POST 操作方法,並且在 POST 操作中應該始終進行的第一個檢查之一是檢查我們的 ModelState 是否有效。
如果 ModelState 有效,那麼我們知道使用者給了我們一個使用者名稱和密碼並確認了密碼;如果不是,我們需要讓他們提供正確的資訊。
以下是 Register 操作的實現。
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model) {
if (ModelState.IsValid) {
var user = new User { UserName = model.Username };
var result = await _userManager.CreateAsync(user, model.Password);
if (result.Succeeded) {
await _signManager.SignInAsync(user, false);
return RedirectToAction("Index", "Home");
} else {
foreach (var error in result.Errors) {
ModelState.AddModelError("", error.Description);
}
}
}
return View();
}
如果我們的ModelState有效,我們需要與 Identity 框架進行通訊。我們還需要建立一個新的 User 實體例項,並將我們的輸入model.Username複製到 User 實體的UserName屬性中。
但是,我們不會複製密碼,因為在 User 實體中沒有儲存純文字密碼的地方。相反,我們將密碼直接傳遞給 Identity 框架,它將對密碼進行雜湊處理。
所以我們有一個 userManager。建立一個非同步方法,我們需要傳遞使用者名稱,以便我們可以儲存該使用者的密碼。
此非同步方法返回一個結果,告訴我們例項是否成功或失敗,如果失敗,它將提供一些可能失敗的原因。
如果結果成功,我們可以登入剛剛建立帳戶的使用者,然後要求 SignInManager 登入此使用者。現在,將使用者重定向回主頁,您現在將被認證。
如果結果不成功,那麼我們應該嘗試告訴使用者原因,並且從 UserManager 返回的結果具有一系列錯誤,我們可以迭代這些錯誤並將這些錯誤新增到 ModelState 中。這些錯誤將在檢視中可用於驗證標籤助手,以便在頁面上顯示資訊。
在 ModelState.AddModelError 中,我們可以提供一個鍵將錯誤與特定欄位關聯起來。我們還將使用一個空字串並新增提供的錯誤描述。
讓我們儲存所有檔案並執行應用程式,然後轉到/account/register。
讓我們輸入一個使用者名稱和一個非常簡單的 5 個字元的密碼。
現在,單擊“註冊”按鈕。
預設情況下,Identity 框架會嘗試對密碼執行一些規則。
密碼必須至少包含 6 個字元,一個字元必須為小寫,一個必須為大寫,並且必須有一個非數字字元。
這些錯誤出現在這裡的原因是我們頁面上有一個驗證摘要,它正在獲取從userManager.CreateAsync結果返回的錯誤。
現在我們對密碼規則有了更多瞭解,讓我們嘗試建立一個足夠複雜的密碼並單擊“註冊”。
您現在將看到主頁。這意味著操作成功。現在讓我們轉到 SQL Server 物件資源管理器。
右鍵單擊dbo.AspNetUsers表並選擇檢視資料。
您現在可以看到使用者已成功建立,您還可以看到 Users 表中的一條新記錄。您還可以看到一個雜湊密碼值以及使用者名稱,這就是我們用mark.upston註冊的使用者名稱。