目標
- 以RESTful API實作用戶註冊、登入、取得用戶資訊及驗證用戶身分
- 使用mongodb資料庫及mongoose產生Schema
- 使用passport進行中間件擴展,支援多種驗證方式,如OAuth、本地驗證...等
- 以jwt進行token的產生及識別
- 使用bcrypt對用戶密碼加解密
2016/9/24 新增
- user權限(role)
- 編輯user
- 加入刪除user的權限
- 加入swagger ui
Installation
Package Dependence
- PassportJS - for user password security
- Simple JWT - token use
- Mongoose - mongodb object modeling
目錄結構
NodeJS_User_Authentication
|-config
|-database.js - token密鑰及db連線訊息
|-initial.js - 初始化配置(role permissions)
|-middleware
|-jwtauth.js - 以passport-jwt建構本地jwt驗證策略
|-models
|- role.js - 創建role schema
|- users.js - 創建user schema並提供儲存用戶、密碼加密、密碼比對方法
|-node_modules - package dependences
|-routes
|- initial.js - 初始化role permissions
|- users.js - 用戶路由,包括登入、註冊取得用戶資訊
|-services
|- error
|-builder.js - 錯誤訊息、狀態碼定義
|- permissions
|- validator.js - 驗證user操作權限的相關邏輯
|- test
|- routes
|- users.js
|- all.test.js 測試入口
package.json
readme.md
run.js
Step By Step
config/database.js,配置db連線字串及token密鑰,建議使用環境變數避免hard code於程式碼內
config/initial.js, 配置初始化帳戶、權限創建models/user.js,建立用戶模型,使用mongoose對mongodb進行schema定義
創建models/role.js,建立角色模型
middleware/jwtauth.js設計驗證權限的中間件,這裡使用ExtractJwt對request進行解析token
routes/initial.js, 設定最高管理者、各個角色
routes/users.js,包括登入、註冊、取得用戶訊息
- 登入 - 檢查用戶是否存在、解密並檢查密碼正確性、產生jwt token
- 註冊 - 檢查request body 是否包含username、password、displayName,檢查username是否重複
- 取得用戶資訊- 中間件jwtauth.js通過驗證時設定req.user,因此直接回傳req.user
使用postman工具進行API驗證
* 註冊用戶
* 登入 - 並取得token
* 取得用戶資訊- 未帶入token
* 取得用戶資訊 - 帶入token
留言
張貼留言