grocery แบบ mvc step#2 Adding Authentication

Adding Authentication to ASP.NET Core

[code]
> dotnet add package JWT
> dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
> dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
[/code]

Configuring JWT Properties

appsettings.json

สร้างไฟล์ JWTSettings.cs ไว้ที่ root directory

JWTSettings.cs

Startup.cs

Enabling User Registration

สร้างไฟล์ Controllers/AccountController.cs

สร้างไฟล์ Models/Credentials.cs

Models/Credentials.cs

สร้างไฟล์ Data/UserDbContext.cs

Data/UserDbContext.cs

Startup.cs

Perform migration

ใช้คำสั่งนี้จะ Eror แบบนี้ เป็นเพราะมี DbContext มากกว่าหนึ่ง

[code]
> dotnet ef migrations add "Config JWT"
More than one DbContext was found. Specify which one to use. Use the ‘-Context’ parameter for PowerShell commands and th
e ‘–context’ parameter for dotnet commands.
[/code]

ดังนั้นให้ระบุ DbContext ไปเลยว่าใช้ตัวไหน

[code]
> dotnet ef migrations add "Config JWT" –context UserDbContext
> dotnet ef database update –context UserDbContext
[/code]

รัน F5

[code]
> dotnet run
[/code]

Register ผู้ใช้งาน

ใช้ Postman ทำการ POST ไปที่
https://localhost:5001/api/account
พารามิเตอร์ส่งใน body เป็น

[code]
{
"email": "mr.phaisarn@gmail.com",
"password": "123456#User"
}
[/code]

จะได้

[code]
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJtci5waGFpc2FybkBnbWFpbC5jb20iLCJlbWFpbCI6Im1yLnBoYWlzYXJuQGdtYWlsLmNvbSIsImlzcyI6ImRvdG5ldF9ncm9jZXJ5X2xpc3QiLCJhdWQiOiJHcm9jZXJ5TGlzdEFQSSIsIm5iZiI6MTUzOTc4Nzg4Mi4wLCJpYXQiOjE1Mzk3ODc4ODIuMCwiZXhwIjoxNTQwMzkyNjgyLjB9.Ssw96pKsqgUZB7Ay75mx60jYdFku_MvCDyha136gdgU",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6ImFjZWE1NWRiLWE5MmQtNGM5Ni1iNGEwLTA0NDE2YWU2NGMxYyIsInN1YiI6Im1yLnBoYWlzYXJuQGdtYWlsLmNvbSIsImVtYWlsIjoibXIucGhhaXNhcm5AZ21haWwuY29tIiwiZW1haWxDb25maXJtZWQiOmZhbHNlLCJpc3MiOiJkb3RuZXRfZ3JvY2VyeV9saXN0IiwiYXVkIjoiR3JvY2VyeUxpc3RBUEkiLCJuYmYiOjE1Mzk3ODc4ODIuMCwiaWF0IjoxNTM5Nzg3ODgyLjAsImV4cCI6MTU0MDM5MjY4Mi4wfQ._fIqx3oDpHy6KKKk-CVez9vBzXO2TClaZK1sXEFA-rE"
}
[/code]