Olá, estou fazendo um trabalho pra faculdade e o minha aplicação consiste em um blog, só que sempre que faço algum tipo de alteração no código eu estou sendo “deslogado” e enviado de volta para a pagina de login/cadastro.
Segue o código:
route.js
const express = require('express')
const router = express.Router()
const mysql = require('mysql')
const bcrypt = require('bcryptjs')
const session = require('express-session')
const { logginRequired } = require('../config/auth')
// conexão com o banco de dados
const database = mysql.createConnection({
connectionLimit: 100,
host: process.env.HOST,
user: process.env.USER,
password: process.env.PASSWORD,
database: process.env.DB
})
database.connect((err) => {
if (err) throw err
console.log('Mysql connected')
})
// rota principal
router.get('/', (req, res) => res.render('home'))
// rota de cadastro
router.post('/register', (req, res) => {
const { name, email, password } = req.body
let errors = []
if (!name || !email || !password) errors.push('Preencha todos os campos!')
if (password.length < 5) errors.push('A senha precisa ter pelo menos 5 caracteres!')
if (errors.length > 0) {
req.flash('errors', errors)
return res.redirect('/')
}
database.query("SELECT `email` FROM `users` WHERE `email`=?", [email], (err, result) => {
if (result.length > 0) {
errors.push('Usuario ja cadastrado!')
req.flash('errors', errors)
return res.redirect('/')
}
})
database.query("INSERT INTO users SET name=?, email=?, password=?", [name, email, password], (err, result) => {
if (err) throw err
res.redirect('/')
})
})
// rota de login
router.post('/login', async (req, res) => {
const { email, password } = req.body
let errors = []
if (email && password) {
database.query('SELECT * FROM users WHERE email = ? AND password = ?', [email, password], (err, results) => {
if (results.length > 0) {
req.session.userID = results[0].id,
req.session.user = results[0],
//console.log(results[0].name)
res.redirect('/user')
} else {
errors.push('Usuario ou senha incorretos')
req.flash('errors', errors)
return res.redirect('/')
}
})
} else {
errors.push('Preencha todos os campos!')
req.flash('errors', errors)
return res.redirect('/')
}
})
// rota de logout
router.get('/logout', (req, res) => {
req.session.destroy()
return res.redirect('/')
})
// rota do usuario
router.get('/user', logginRequired, (req, res) => {
//console.log(req.session.user.id)
res.render('userPage')
})
// rota de publicação get
router.get('/user/write', logginRequired, (req, res) => res.render('write'))
// rota de publicação post
router.post('/user/write', logginRequired, (req, res) => {
const { title, status, body } = req.body
const user_id = req.session.user.id
if (title && status && body) {
database.query("INSERT INTO posts SET title=?, status=?, body=?, user_id=?", [title, status, body, user_id], (err, results) => {
if (err) throw err
console.log(results[0])
res.redirect('/user')
})
} else {
errors.push('Preencha todos os campos!')
req.flash('errors', errors)
return res.redirect('/')
}
})
module.exports = router
app.js
require('dotenv').config()
const express = require('express')
const session = require('express-session')
const flash = require('connect-flash')
const path = require('path')
const routes = require('./src/routes/routes')
const { globals } = require('./src/middleware/middleware')
const app = express()
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.set('views', path.resolve(__dirname, 'src', 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, '/public')))
app.use(session({
secret: process.env.SECRET,
resave: false,
saveUninitialized: false,
cookie: { maxAge: 24 * 60 * 60 * 1000 }
}))
app.use(flash())
app.use(globals)
app.use(routes)
const PORT = process.env.PORT || 3001
app.listen(PORT, () => console.log(`Running on port ${PORT}`))
auth.js
exports.logginRequired = (req, res, next) => {
if(!req.session.user) {
req.flash('errors', 'Você precisa estar logado para estrar nessa página!')
res.redirect('/')
return
}
next()
}