Просмотр исходного кода

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

pull/31/head
djordje.djoric 3 лет назад
Родитель
Сommit
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 Просмотреть файл

return res.send('Token ' + req.body.token + ' invalidated!') 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 Просмотреть файл

const {Router} = require("express") const {Router} = require("express")
const User = require("../models/user") const User = require("../models/user")


const getAll = async (res) => {
const getUsers = async (res) => {
try { try {
const allUsers = await User.find({}) const allUsers = await User.find({})
return res.status(200).send(allUsers) return res.status(200).send(allUsers)
} }
} }


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


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


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

+ 13
- 9
src/models/token.js Просмотреть файл

return token 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) { tokenSchema.statics.destroyToken = async function(token) {

+ 18
- 5
src/routes/token.js Просмотреть файл

const express = require('express') 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 router = new express.Router()
const auth = require('../middleware/auth')
const endpoints = require('../endpoints/token') const endpoints = require('../endpoints/token')


/** /**
return await endpoints.logout(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 module.exports = router

+ 3
- 4
src/routes/user.js Просмотреть файл

const endpoints = require('../endpoints/user') const endpoints = require('../endpoints/user')
const router = new express.Router() const router = new express.Router()
const app = express() const app = express()
const auth = require('../middleware/auth')


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


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


/** /**
* description: Internal server error. * description: Internal server error.
*/ */
router.post('/users', async (req, res) => { router.post('/users', async (req, res) => {
return await endpoints.create(res, req.body)
return await endpoints.createUser(res, req.body)
}) })


/** /**

Загрузка…
Отмена
Сохранить