2016年8月5日 星期五

Nodejs、momgodb user authentication with JSON Web Tokens


目標

  • 以RESTful API實作用戶註冊、登入、取得用戶資訊及驗證用戶身分
  • 使用mongodb資料庫及mongoose產生Schema
  • 使用passport進行中間件擴展,支援多種驗證方式,如OAuth、本地驗證...等
  • 以jwt進行token的產生及識別
  • 使用bcrypt對用戶密碼加解密

2016/9/24 新增
  • user權限(role)
  • 編輯user
待完成

  • 加入刪除user的權限
  • 加入swagger ui
Source Code:https://github.com/weihanchen/NodeJS_User_Authentication

Installation

Package Dependence


  1. PassportJS - for user password security
  2. Simple JWT - token use
  3. 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
run.js,路由及相關中間件設定,其中/users/me加入jwtauth.authenticate驗證token是否具有存取權限

使用postman工具進行API驗證


* 註冊用戶


* 登入 - 並取得token


* 取得用戶資訊-  未帶入token


* 取得用戶資訊 - 帶入token


沒有留言:

張貼留言