| const validator = require('validator') | |||||
| const mongoose = require('mongoose') | |||||
| const bcrypt = require('bcryptjs') | |||||
| const jwt = require('jsonwebtoken') | |||||
| const User = require('../models/user') | |||||
| const tokenSchema = new mongoose.Schema({ | |||||
| token: { | |||||
| type: String, | |||||
| required: true | |||||
| }, | |||||
| userId: { | |||||
| type: String, | |||||
| required: true | |||||
| } | |||||
| }) | |||||
| tokenSchema.statics.findByCredentials = async (email, password) => { | |||||
| const user = await User.findOne({email}) | |||||
| if(!user) { | |||||
| throw new Error('Login unsuccessfull!') | |||||
| } | |||||
| const checkMatch = await bcrypt.compare(password, user.password) | |||||
| console.log(password) | |||||
| console.log(user.password) | |||||
| console.log(checkMatch) | |||||
| if(!checkMatch) { | |||||
| return | |||||
| } | |||||
| return user | |||||
| } | |||||
| const Token = mongoose.model('Token', tokenSchema) | |||||
| module.exports = Token |
| next() | next() | ||||
| }) | }) | ||||
| userSchema.statics.findByCredentials = async (email, password) => { | |||||
| const user = await User.findOne({email}) | |||||
| if(!user) { | |||||
| throw new Error('Login unsuccessfull!') | |||||
| } | |||||
| const checkMatch = await bcrypt.compare(password, user.password) | |||||
| console.log(password) | |||||
| console.log(user.password) | |||||
| console.log(checkMatch) | |||||
| if(!checkMatch) { | |||||
| throw new Error('Wrong password!') | |||||
| } | |||||
| return user | |||||
| } | |||||
| userSchema.methods.generateAuthToken = async function() { | userSchema.methods.generateAuthToken = async function() { | ||||
| const user = this | const user = this | ||||
| const token = jwt.sign({ _id: user._id.toString() }, 'ovoJeSecret') | const token = jwt.sign({ _id: user._id.toString() }, 'ovoJeSecret') |
| const express = require('express') | |||||
| const Token = require('../models/token') | |||||
| const User = require('../models/user') | |||||
| const bcrypt = require('bcryptjs') | |||||
| const router = new express.Router() | |||||
| router.get('/login', async (req, res) => { | |||||
| const findUser = await Token.findByCredentials(req.body.email, req.body.password) | |||||
| if(!findUser) { | |||||
| return res.status(400).send('Invalid credentials!') | |||||
| } | |||||
| const isValidPassword = await bcrypt.compare(req.body.password, findUser.password) | |||||
| if(!isValidPassword) { | |||||
| return res.status(400).send("Email or password is incorrect!") | |||||
| } | |||||
| return res.send(findUser) | |||||
| }) | |||||
| module.exports = router |
| const port = process.env.PORT || 3000 | const port = process.env.PORT || 3000 | ||||
| require('./database/mongoose') | require('./database/mongoose') | ||||
| const userRouter = require('./routers/user') | const userRouter = require('./routers/user') | ||||
| const tokenRouter = require('./routers/token') | |||||
| //const viewsPath = path.join(__dirname, '../templates/views') | //const viewsPath = path.join(__dirname, '../templates/views') | ||||
| app.use(express.json()) | app.use(express.json()) | ||||
| app.use(userRouter) | app.use(userRouter) | ||||
| app.use(tokenRouter) | |||||
| app.get('/', (req, res) => { | app.get('/', (req, res) => { | ||||
| try { | try { |