瀏覽代碼

Implemented token refresh route and added to swagger. Minor changes to user route names (#30)

pull/31/head
djordje.djoric 3 年之前
父節點
當前提交
a5c15386b1
共有 5 個檔案被更改,包括 51 行新增23 行删除
  1. 13
    1
      src/endpoints/token.js
  2. 4
    4
      src/endpoints/user.js
  3. 13
    9
      src/models/token.js
  4. 18
    5
      src/routes/token.js
  5. 3
    4
      src/routes/user.js

+ 13
- 1
src/endpoints/token.js 查看文件

@@ -30,4 +30,16 @@ const logout = async (req, res) => {
return res.send('Token ' + req.body.token + ' invalidated!')
}

module.exports = { loginUser, logout }
const refreshUserToken = async (req, res) => {
const form = {
token: req.body.token
}
const result = await Token.refreshAuthToken(form.token)
if(!result) {
return res.status(404).send('Token not valid!')
}

return res.send('Token ' + result + ' refreshed successfully!')
}

module.exports = { loginUser, logout, refreshUserToken }

+ 4
- 4
src/endpoints/user.js 查看文件

@@ -2,7 +2,7 @@ const bcrypt = require("bcryptjs/dist/bcrypt")
const {Router} = require("express")
const User = require("../models/user")

const getAll = async (res) => {
const getUsers = async (res) => {
try {
const allUsers = await User.find({})
return res.status(200).send(allUsers)
@@ -11,7 +11,7 @@ const getAll = async (res) => {
}
}

const getById = async (res, id) => {
const getUser = async (res, id) => {
try {
if (!id) {
return res.status(400).send('Bad request')
@@ -28,7 +28,7 @@ const getById = async (res, id) => {
}
}

const create = async (res, userModel) => {
const createUser = async (res, userModel) => {
try {
if (Object.entries(userModel).length === 0) {
return res.status(400).send('Object cant be empty')
@@ -110,4 +110,4 @@ const deleteUser = async (res, id) => {
}
}

module.exports = {getAll, getById, create, updateUser, updateUserContacts, deleteUser}
module.exports = {getUsers, getUser, createUser, updateUser, updateUserContacts, deleteUser}

+ 13
- 9
src/models/token.js 查看文件

@@ -39,15 +39,19 @@ tokenSchema.statics.generateAuthToken = async function(userArg) {
return token
}

tokenSchema.statics.refreshAuthToken = async function(token, refreshOptions) {
const payload = jwt.verify(token, 'ovoJeSecret', refreshOptions.verify)
delete payload.iat
delete payload.exp
delete payload.nbf
delete payload.jti
const jwtSignOptions = Object.assign({ }, this.options, { jwtid: refreshOptions.jwtid })

return jwt.sign(payload, 'ovoJeSecret', jwtSignOptions)
tokenSchema.statics.refreshAuthToken = async function(token) {
console.log(token)
try {
const payload = jwt.verify(token, 'ovoJeSecret')
console.log(payload)
delete payload.iat
delete payload.exp
delete payload.nbf
delete payload.jti
return jwt.sign(payload, 'ovoJeSecret', { expiresIn: 60 * 20 })
} catch(e) {
return null
}
}

tokenSchema.statics.destroyToken = async function(token) {

+ 18
- 5
src/routes/token.js 查看文件

@@ -1,10 +1,5 @@
const express = require('express')
const Token = require('../models/token')
const User = require('../models/user')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs')
const router = new express.Router()
const auth = require('../middleware/auth')
const endpoints = require('../endpoints/token')

/**
@@ -43,4 +38,22 @@ router.post('/auth/logout', async (req, res) => {
return await endpoints.logout(req, res)
})

/**
* @openapi
* /auth/refresh/:
* put:
* description: Refresh user token
* tags: [Token]
* responses:
* 200:
* description: Token refreshed successfully!
* 404:
* description: Token not valid!
* 500:
* description: Internal server error.
*/
router.post('/auth/refresh', async(req, res) => {
return await endpoints.refreshUserToken(req, res)
})

module.exports = router

+ 3
- 4
src/routes/user.js 查看文件

@@ -3,10 +3,9 @@ const User = require('../models/user')
const endpoints = require('../endpoints/user')
const router = new express.Router()
const app = express()
const auth = require('../middleware/auth')

router.get('/users', async (req, res) => {
return await endpoints.getAll(res)
return await endpoints.getUsers(res)
})

/**
@@ -24,7 +23,7 @@ router.get('/users', async (req, res) => {
* description: Internal server error.
*/
router.get('/users/:id', async (req, res) => {
return await endpoints.getById(res, req.params.id)
return await endpoints.getUser(res, req.params.id)
})

/**
@@ -42,7 +41,7 @@ router.get('/users/:id', async (req, res) => {
* description: Internal server error.
*/
router.post('/users', async (req, res) => {
return await endpoints.create(res, req.body)
return await endpoints.createUser(res, req.body)
})

/**

Loading…
取消
儲存