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

Destruction of user token

pull/16/head
Djordje Djoric 4 лет назад
Родитель
Сommit
8e48556166
6 измененных файлов: 37 добавлений и 5 удалений
  1. 0
    0
      src/endpoints/token.js
  2. 16
    0
      src/middleware/auth.js
  3. 13
    1
      src/models/token.js
  4. 2
    0
      src/models/user.js
  5. 5
    4
      src/routes/token.js
  6. 1
    0
      src/routes/user.js

+ 0
- 0
src/endpoints/token.js Просмотреть файл


+ 16
- 0
src/middleware/auth.js Просмотреть файл

const jwt = require('jsonwebtoken')
const User = require('../models/user')

const auth = async (req, res, next) => {
try {
const token = req.header('Authorization').replace('Bearer ', '')
const decoded = jwt.verify(token, 'ovoJeSecret')
console.log(decoded)
} catch (e) {
return res.send(e)
}
console.log('auth middleware')
next()
}

module.exports = auth

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

return return
} }
const checkMatch = await bcrypt.compare(password, user.password) const checkMatch = await bcrypt.compare(password, user.password)
console.log(password)
console.log(user.password)
if(checkMatch) { if(checkMatch) {
return user return user
} }
delete payload.jti delete payload.jti
const jwtSignOptions = Object.assign({ }, this.options, { jwtid: refreshOptions.jwtid }) const jwtSignOptions = Object.assign({ }, this.options, { jwtid: refreshOptions.jwtid })


return jwt.sign(payload, this.secretOrPrivateKey, jwtSignOptions)
return jwt.sign(payload, 'ovoJeSecret', jwtSignOptions)
}

tokenSchema.statics.destroyToken = async function(token) {
const findUser = await User.findOne({ 'tokens.token': token })
findUser.tokens = findUser.tokens.filter((currToken) => {
return currToken.token !== token
})
await findUser.save()
console.log('uspesno')
return jwt.sign(token, 'a', { expiresIn: 1 })
} }


const Token = mongoose.model('Token', tokenSchema) const Token = mongoose.model('Token', tokenSchema)

+ 2
- 0
src/models/user.js Просмотреть файл

userSchema.pre('save', async function(next) { userSchema.pre('save', async function(next) {
const user = this const user = this


user.password = await bcrypt.hash(user.password, 8)

console.log('Middleware before password hash') console.log('Middleware before password hash')
next() next()
}) })

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

const jwt = require('jsonwebtoken') const jwt = require('jsonwebtoken')
const bcrypt = require('bcryptjs') const bcrypt = require('bcryptjs')
const router = new express.Router() const router = new express.Router()
const auth = require('../middleware/auth')




router.post('/token', async (req, res) => {
router.post('/login', async (req, res) => {
const findUser = await Token.findByCredentials(req.body.email, req.body.password) const findUser = await Token.findByCredentials(req.body.email, req.body.password)
if(!findUser) { if(!findUser) {
return res.status(400).send('User does not exist, wrong email') return res.status(400).send('User does not exist, wrong email')


const token = await Token.generateAuthToken(findUser) const token = await Token.generateAuthToken(findUser)


return res.send({findUser, token})
return res.send(findUser)
}) })


router.post('/refresh/:token', async (req, res) => {
router.post('/logout/', async (req, res) => {
const result = Token.destroyToken(req.body.token)
}) })


module.exports = router module.exports = router

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

const User = require('../models/user') const User = require('../models/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) => {
// try{ // try{

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