Tartalomjegyzék

< Sequelize

Sequelize azonosítás

GitHub

Kontroller

app/controllers/auth.controllers.js
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const authconfig = require('../../config/auth.config.js');
const { sequelize, Sequelize } = require('../models');
const db = require('../models');
db.user = require('../models/user')(sequelize, Sequelize);
const User = db.user;
 
exports.register = (req, res) => {
    console.log('-----')
 
    if(!req.body.name) {
        res.status(400).send({
            message: "A név megadása kötelező!"
        })
        return
    }
    if(!req.body.email) {
        res.status(400).send({
            message: "Az email megadása kötelező!"
        })
    }
    if(!req.body.password) {
        res.status(400).send({
            message: "A jelszó megadása kötelező!",
            password: ""
        })
    }
    if(!req.body.password_confirmation) {
        res.status(400).send({
            message: "A jelszó ismétlése kötelező",
            password_confirmation: ""
        })
    }
    if(req.body.password != req.body.password_confirmation) {
        res.status(400).send({
            message: "A jelszavak nem egyeznek!"
        })
    }
 
    User.findOne({
        where: {
            name: req.body.name
        }
    })
    .then(user => {
        if(user) {
            res.status(400).send({ message: "Already user " + user.name})
        }else {
            const user = {
                name: req.body.name,
                email: req.body.email,
                password: bcrypt.hashSync(req.body.password)
            }
            User.create(user)
            .then( result => {
                res.status(201).send(result)
            })
 
        }
    })
};
 
exports.login = (req, res) => {
    console.log('-----')
 
    if(!req.body.name) {
        res.status(400).send({
            message: "A név megadása kötelező!"
        })
        return
    }
    if(!req.body.password) {
        res.status(400).send({
            message: "A jelszó megadása kötelező!",
            password: ""
        })
    }
 
    const user = {
        name: req.body.name,
        password: bcrypt.hashSync(req.body.password)
    }
 
    User.findOne({
        where: {
            name: req.body.name
        }
    })
    .then(user => {
        if(!user) {
            return res.status(404).send({ message: "User not found."})
        }
        var passwordIsValid = bcrypt.compareSync(
            req.body.password,
            user.password
        );
        if(!passwordIsValid) {
            res.status(401).send({
                accessToken: null,
                message: "Invalid password!"
            });
        }
        var token = jwt.sign({ id: user.id }, authconfig.secret, {
            expiresIn: 86400 //24 óra
        });
        res.status(200).send({
            id: user.id,
            name: user.name,
            email: user.email,
            accessToken: token
        });
    })
};

Middleware

app/middleware/auhtjwt.js
const jwt = require("jsonwebtoken");
const config = require("../../config/auth.config.js");
const db = require("../models");
const User = db.user;
 
exports.verifyToken = (req, res, next) => {
    let authData = req.headers.authorization;
    if(!authData) {
        return res.status(403).send({
            message: 'No token provided!'
        })
    }
    let token = authData.split(' ')[1];
 
    jwt.verify(token, config.secret, (err, decoded) => {
        if(err) {
            return res.status(401).send({
                message: "Unauthorized!"
            })
        }
        req.userId = decoded.id;
        next()
    })
 
 
};

Routing

routes/api.routes.js
module.exports = app => {
    const router = require('express').Router();
    const employees = require('../app/controllers/employee.controller');
    const auth = require('../app/controllers/auth.controller');
    const { verifyToken } = require('../app/middleware/authjwt');
 
    router.get('/employees',  employees.index);
    router.post('/employees', [verifyToken], employees.store);
    router.delete('/employees/:id', [verifyToken], employees.destroy);
    router.put('/employees/:id', [verifyToken], employees.update);
 
    router.post('/register', auth.register);
    router.post('/login', auth.login);
 
    app.use('/api', router);
 
}