#### 測試帳號 ##### Admin User username : admin password : admin 在打 /user 拿到的 role 為 admin ##### Normal User without read auth username : user_1 password : 1 在打 /user 拿到的 role 為 no_auth ##### Normal User with read auth username : user_2 password : 2 在打 /user 拿到的 role 為 read_role ## 註冊 此 query 會 response token 在 cookie 請記得從 cookie 拿新的 token ### 請求 `POST /register` ```json { "username": "testuser", "email": "testuser@example.com", "password": "testpassword" } ``` 請前端那邊檢查信箱格式跟密碼格式 密碼規則:使用者密碼強度(密碼長度 12 個字元以上、組成字元必須包含英文大寫、小寫及數字。 ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "ok" } ``` #### 失敗 狀態碼:400 Bad Request ```json { "detail": "Username already exists" } ``` ## 登入 此 query 會 response token 在 cookie 請記得從 cookie 拿新的 token ### 請求 `POST /login` ```json { "username": "testuser", "password": "testpassword" } ``` ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "ok" } ``` #### 失敗 狀態碼:401 Unauthorized ```json { "detail": "Invalid username or password" } ``` 登入失敗三次後,會顯示以下資料:現在設定是一分鐘後就解除封鎖 狀態碼:401 Unauthorized ```json { "detail": "Too many failed login attempts. Please try again 15 mins later." } ``` ## 登出 我會讓原本的 token 無法使用,所以你清不清除都沒關係 登出後應該就回到登入註冊頁面 ### 請求 `GET /logout` ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "ok" } ``` ## 更改密碼 此 query 會 response token 請記得從 cookie 拿新的 token ### 請求 `PUT /change_password` ```json { "old_password": "testpassword", "new_password": "newpassword" } ``` ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "ok" } ``` #### 失敗 狀態碼:401 Unauthorized ```json { "detail": "Invalid password" } ``` 狀態碼:400 Bad Request ```json { "detail": "Password used in the past 3 changes" } ``` ## 獲取使用者列表 ### 請求 需要有 admin 權限的人才可以,我這邊會檢查 `GET /users_list` ### 響應 #### 成功 狀態碼:200 OK ```json { "users_list": [ { "username": "testuser1", "email": "testuser1@example.com", "role": "user" }, { "username": "testuser2", "email": "testuser2@example.com", "role": "user" } ] } ``` #### 失敗 狀態碼:403 Forbidden ```json { "detail": "Forbidden" } ``` ## 獲取當前使用者 你可以從 token 解出 user info ### 請求 `GET /user` ### 響應 #### 成功 狀態碼:200 OK ```json { "username": "testuser", "email": "testuser@example.com", "role": "user" } ``` ## 刪除使用者 只有 admin 才可以做這件事 ### 請求 `DELETE /user/{username}` ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "User deleted successfully" } ``` #### 失敗 狀態碼:403 Forbidden ```json { "detail": "Forbidden" } ``` ## 更新使用者 只有 admin 可以做這件事 ### 請求 `PUT /user` 這三個欄位缺一不可,即便沒改也要帶 ```json { "username": "testuser", "email": "testuser@example.com", "role": "admin" } ``` ### 響應 #### 成功 狀態碼:200 OK ```json { "message": "User updated successfully" } ``` #### 失敗 狀態碼:400 Bad Request ```json { "detail": "Error with ..." } ``` ## 管理者頁面 打 `/users_list` api 拿到所有使用者資料後, 應該就可以建立一個表格,像是下面這樣 | username | email | 表格讀取權限 | | -------- | ----- | ----------------------------- | | user_1 | abd@mial | 有權限就打勾 | 等於說如果 admin 的人,把勾從 V 取消,則 put `/user` 帶 ``` { "username": "user_1", "email": "abd@mial ", "role": "no_auth" } ``` 反之,如果把沒打勾的打勾則變成 ``` { "username": "user_1", "email": "abd@mial ", "role": "read_role" } ```