25.ProfileService實現(調試)

上一節課拿到的AccessToken和IdToken
數據庫

實現ProfileService類

在服務端 添加ProfileService類

須要繼承IProfileServiuce


用到的畫圖工具



IprofileService接口裏面有兩個方法, 咱們去實現這兩個方法
這裏是否激活,咱們先設置爲false


IsActive當咱們拿到Subject的時候再去設置爲true,也就是咱們這裏拿到的sub的值爲4的這個。


對應咱們數據裏的這個用戶id。AspNetUsers這個表的主鍵。用戶的id是4


獲取到subjectId

而後根據SubjectId拿到用戶的信息。注入UserManager。命名空間在AspNetCore.Identity命名空間下
緩存

經過SubjectId獲取到用戶的信息,SubjecId其實就是User表的用戶Id


精簡爲一行代碼。當用戶對象不爲空就返回true,那麼IsActive就是True

加上await 和 async

咱們以前沒有啓用用戶的鎖定,若是用戶輸入錯 次數太多。LockoutEnabled就會鎖定



須要對IssuedClaim進行賦值。這些Claims就是從用戶裏來的


Claim在System.Security.Claims這個命名空間下

咱們須要經過GetClaimFormUser這個方法來返回IssuedClaims


JwtClaimTypes返回的都是常量,說白了就是固定的字符串

userName也就是數據庫內的Administrator

經過user獲取到Roles的列表而後 添加到Claims裏面


還須要加上一個頭像的屬性。在ApplicationUser裏面加上了Avatar頭像的這麼一個屬性值

加上Avatar的Claim

把這個方法名字加上Async重命名一下

這樣最終返回了IssuedClaims
cookie

注入ProfileService類

在StartUp裏面

async

 

數據遷移

由於咱們修改了ApplicationUser,因此須要對數據庫作更新。由於這裏咱們增長了Avatar頭像的屬性,須要對數據庫作遷移



更新數據庫

這樣咱們頭像的字段就加上來了


把AspNetUsers表內的數據刪除掉

工具

Seed初始化數據

刪掉數據以後,執行咱們的seed方法



頭像地址是從網上隨便找的圖片的地址

而後把默認的用戶添加到administrator的角色裏面

運行 role添加失敗了





也有個succeed,若是失敗了就拋出一個異常


再次運行,又報了個錯誤


隨即的一個值,用來設置密碼的,這裏咱們先隨便設置成admin

運行程序  依然報錯


主鍵可能須要改一下,由於它沒有辦法自動生成



ApplicationUserRole也是一樣的

再去作數據遷移

生成的內容比較多,可是有用的就是你這一句

角色也加了一些東西


而後更新數據庫

依然失敗


由於用戶尚未建立成功就去給用戶設置角色了形成了這個錯誤

仍是有錯-_-!



調試,返回了密碼規則錯誤的問題


小寫、特殊符號、大寫、長度這些密碼的規則咱們設置爲false

用戶建立成功 返回了succeed

user表有數據了


頭像字段也有值了

RoleId給了個1


角色表
測試

 

測試

 

把cookie都清除掉


啓動客戶端。這樣就可使用123456 簡單的密碼來登錄



點贊成。登錄成功以後跳轉回去




再次清除緩存,登錄
 

客戶端



這裏調試用VScode調試



能夠看到只有三個Claims


服務端須要設置這裏。這裏作映射,從prolfileServie拿到Claim作一個綁定,綁定過以後才能夠從從ProfileService返回裏面去拿到





這個端口能夠經過Access_token拿到


再次運行測試

role和avatar都拿到了


客戶端的設置。openIdConnect這裏本身要作一個映射



若是不這麼作也能夠經過Access_Token


這裏是發起了另一個請求到咱們5000的端口


其實就至關於,發送了一次請求,把獲取的token又訪問了一次這個地址拿到UserInfo的這幾個信息

咱們還能夠把idToken複製到jwt.io解密出來

他沒有包含頭像的信息,這是由於它是另外發起一個請求到endPoint去哪頭像這些信息
因此客戶端的這裏,GetCliamsFormUserInfoEndpoint設置爲了True

這裏注意,設置的也就是頁面上拿到的IdToken


服務端設置,這裏爲true,那麼這些信息都被加密在idtoken裏面

客戶端這裏就不用設置了。

客戶端這裏也能夠去掉了


一種是經過發起另外的請求去獲取用戶的信息,另一種是在訪問idToken直接就帶過來了
客戶端和服務端再重啓
客戶端的cookie再次清除


這樣用戶的信息直接在idToken裏面都返回了

解密下idToken


 加密

相關文章
相關標籤/搜索