| @@ -20,26 +20,37 @@ tokenSchema.statics.findByCredentials = async (email, password) => { | |||
| if(!user) { | |||
| return | |||
| } | |||
| const checkMatch = await bcrypt.compare(password, user.password) | |||
| console.log(password) | |||
| console.log(user.password) | |||
| console.log(checkMatch) | |||
| if(!checkMatch) { | |||
| if(checkMatch) { | |||
| return user | |||
| } | |||
| return user | |||
| return null | |||
| } | |||
| tokenSchema.statics.generateAuthToken = async function(userArg) { | |||
| const user = userArg | |||
| const token = jwt.sign({ _id: user._id.toString() }, 'ovoJeSecret') | |||
| user.tokens = user.tokens.concat({ token }) | |||
| const token = jwt.sign({ _id: user._id.toString() }, 'ovoJeSecret', { expiresIn: 60 * 20 }) | |||
| const newToken = new Token({ token: token, userId: user._id }) | |||
| await newToken.save() | |||
| user.tokens = user.tokens.concat({ token: newToken }) | |||
| await user.save() | |||
| console.log(newToken) | |||
| 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, this.secretOrPrivateKey, jwtSignOptions); | |||
| } | |||
| const Token = mongoose.model('Token', tokenSchema) | |||
| module.exports = Token | |||
| @@ -26,27 +26,9 @@ userSchema.pre('save', async function(next) { | |||
| const user = this | |||
| console.log('Middleware before password hash') | |||
| console.log(user) | |||
| if(user.isModified('password')) { | |||
| user.password = await bcrypt.hash(user.password, 8) | |||
| } | |||
| console.log('User data that will be written to database: ') | |||
| console.log(user) | |||
| next() | |||
| }) | |||
| userSchema.methods.generateAuthToken = async function() { | |||
| const user = this | |||
| const token = jwt.sign({ _id: user._id.toString() }, 'ovoJeSecret') | |||
| user.tokens = user.tokens.concat({ token }) | |||
| await user.save() | |||
| return token | |||
| } | |||
| const User = mongoose.model('User', userSchema) | |||
| module.exports = User | |||
| @@ -1,25 +0,0 @@ | |||
| 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() | |||
| router.post('/login', async (req, res) => { | |||
| const findUser = await Token.findByCredentials(req.body.email, req.body.password) | |||
| if(!findUser) { | |||
| return res.status(400).send('User does not exist, wrong email') | |||
| } | |||
| const isValidPassword = await bcrypt.compare(req.body.password, findUser.password) | |||
| if(!isValidPassword) { | |||
| return res.status(400).send('Password is incorrect!') | |||
| } | |||
| const token = await Token.generateAuthToken(findUser) | |||
| return res.send(findUser) | |||
| }) | |||
| module.exports = router | |||