# HTTP APIs for Account and Password Management (2023/06/06 update) ## 架設環境 1. 至GitHub clone 專案repository到本地資料夾,於command line輸入以下指令 `git clone https://github.com/yujen77300/API-test.git` 2. 安裝Docker。 參考[Docker官方文件](https://docs.docker.com/engine/install/),依據自己的作業系統安裝Docker engine 3. 於command line, cd到專案在本地的資料夾位置,下圖為此次範例的位置 ![](https://hackmd.io/_uploads/Sy901ZbS2.png) 5. 輸入以下docker-compose指令,其會自動到Docker hub pull啟動專案所需要的image,並同時run起api、db、redis三個containers。 `docker-compose -f docker-compose.yml up` ![](https://hackmd.io/_uploads/Bkexx--rh.png) 5. 待出現以下畫面(約需2~3分鐘),代表已經啟動此專案,接著可以透過Postman測試api ![](https://hackmd.io/_uploads/Bk5KBl-r3.png) ## API操作 除了作業要求的創建帳號、和驗證帳號密碼兩個API之外,另外設計取得使用者帳號和刪除使用者帳號等API,讓使用者更方便做測試,以下分別介紹各API之實作方法。 ### 1. Create Account 使用者必須輸入username和password,規則如下 * 帳號至少3碼,至多32碼 * 密碼至少8碼,至多32碼,且須包含至少一個大寫字母,一個小寫字母和一個數字。 ![](https://hackmd.io/_uploads/HyWCnanUh.png) (密碼9碼,但未包含小寫英文字母,因此出現錯誤) 如帳號已存在,出現以下錯誤 ![](https://hackmd.io/_uploads/BJNWppnI2.png) 如輸入成功畫面如下 ![](https://hackmd.io/_uploads/BJ6o6anU2.png) #### 使用者密碼經過雜湊和加鹽(2023/06/06 更新) 可登入MySQL 查看使用者密碼是否經故雜湊 1. 用 `docker ps` 查詢MySQL的Container ID 2. 輸入 `docker exec -it <<Container ID>> mysql -u user`,進入資料庫 3. 輸入密碼 1qaz@WSX 4. 依序輸入sql指令,`use senaoapi`、`select * from users` 5. 確認密碼已經過雜湊 ![](https://hackmd.io/_uploads/S1UKZA2L2.png) ### 2. Verify Account and Password 此API為驗證使用者帳號密碼,當同一個帳號輸入密碼超過五次,會鎖定一分鐘不能再嘗試輸入密碼。 如帳號未存在,出現以下錯誤 ![](https://hackmd.io/_uploads/rJayGR28h.png) 如帳號存在,密碼輸入錯誤會出現以下畫面 ![](https://hackmd.io/_uploads/HylGMAnUn.png) 同一個帳號輸入超過五次會鎖定一分鐘 ![](https://hackmd.io/_uploads/rJsXMChU3.png) 驗證成功之畫面 ![](https://hackmd.io/_uploads/rk9KzChLh.png) ### 3. Get all users 取得目前所有使用者的資訊 ![](https://hackmd.io/_uploads/SkAKaeZS3.png) ### 4. Get specific user 根據id 取得特定使用者的資訊 ![](https://hackmd.io/_uploads/B12haebB3.png) ### 5. Delete user 根據id 刪除使用者的資訊 刪除id=2的使用者 ![](https://hackmd.io/_uploads/BJ0e0gbr3.png) 再檢視全部的使用者,確定id=2的使用者已經被刪除 ![](https://hackmd.io/_uploads/SyCmAl-r3.png) ## Reference 1. [API document](https://app.swaggerhub.com/apis/YUJENHUANG24/SenaoAssignment/1.0.0)