iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

從實作學習ASP.NET Core - 30天的購物網站系列 第 14

【從實作學習ASP.NET Core】Day14 | 後台 | 用 Identity 實作會員功能

今天要用 .NET Core 自帶的使用者管理套件 Identity 來實現網站的會員功能


ASP.NET Core Identity

ASP.NET Core Identity 是 .NET Core 支援使用者介面 (UI) 登入功能的 API。提供管理使用者、密碼、設定檔資料、角色、宣告、權杖、電子郵件確認等。使用者可以使用儲存在中的登入資訊來建立帳戶,也可以使用外部登入提供者。

加入 Identity 程式碼

用 Scaffold 把 Identity 程式碼載入專案



建立並使用 DbContext OnlineShopUserContext 和 使用者類別 OnlineShopUser

註冊服務

加入了程式碼還不夠,還需要向程式註冊相關服務
打開組態檔Startup.csConfigure

app.UseAuthentication();

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

最後加入 Partial View

_layout.cshtml 的 navbar 加上這行

<partial name="_LoginPartial" />

這樣一來就可以看到右上角出現登入和註冊的標示了



但這時候註冊使用者仍會發生錯誤,這是因為資料庫還沒有把資料表建立好

建立使用者資料表

appsetting.jsonConnectionString 改成我們的 OnlineShop資料庫

"OnlineShopUserContextConnection": "Data Source=DESKTOP-E22K0FS\\SQLEXPRESS;Initial Catalog=OnlineShop;Integrated Security=True"

接下來跟之前一樣執行資料庫移轉
Add-Migration InitialIdentity -Context OnlineShopUserContext
Update-Database -Context OnlineShopUserContext

在ssms就可以看到資料表了


到這裡會員的基本功能就建好囉!


上一篇
【從實作學習ASP.NET Core】Day13 | 後台 | 編輯與刪除
下一篇
【從實作學習ASP.NET Core】Day15 | 後台 | 自定義使用者欄位
系列文
從實作學習ASP.NET Core - 30天的購物網站30

1 則留言

0
wesleybabytw
iT邦新手 5 級 ‧ 2021-10-19 17:11:13

資料庫移轉的語法有錯嗎?
會一直要求填入Name參數,即便填入了,最後一直出現:

Value cannot be null.
Parameter name: connectionString

還在找原因中,不知您那兒有何建議?

看更多先前的回應...收起先前的回應...
Yeh iT邦新手 5 級 ‧ 2021-10-20 03:54:43 檢舉

你可以試試看用InitialIdentity來作為這次移轉的名稱
( 也可以自己取沒關係,Name參數通常只是拿來標記這次更動了什麼東西 )

Add-Migration InitialIdentity -Context OnlineShopUserContext
Yeh iT邦新手 5 級 ‧ 2021-10-20 03:56:42 檢舉

第二個問題
你可能需要確定 Identity 指定的 ConnectionString 有被定義
Areas/Identity/IdentityHostingStartup.cs

services.AddDbContext<OnlineShopUserContext>(options =>
	options.UseSqlServer(
		context.Configuration.GetConnectionString("OnlineShopUserContext")));

appsettings.json

"ConnectionStrings": {
    "OnlineShopContext": "xxx",
    "OnlineShopUserContext": "xxx"
  }

執行後結果一樣,appsettings.json內只能有一組字串,不然會出現重複的TContext:

GenericArguments[0], 'OnlineShopCMS.Migrations.OnlineShopUser.OnlineShopUserContext', on 'Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory`1[TContext]' violates the constraint of type 'TContext'.

後來發現是我開發工具用的是VS2017,core版本太舊(2.1),後來就改用2019的(5.0),就正常了...

我要留言

立即登入留言