Skip to content

Instantly share code, notes, and snippets.

@Denkong
Created October 17, 2018 09:02
Show Gist options
  • Save Denkong/31cc4df469d1dd03ec0ba9d3b1d7aaf2 to your computer and use it in GitHub Desktop.
Save Denkong/31cc4df469d1dd03ec0ba9d3b1d7aaf2 to your computer and use it in GitHub Desktop.
MySql Session for Express
var express = require('express');
var router = express.Router();
//Прием POst параметров
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
//Работа с сессиями
var session = require('express-session')
//Работа с БД
var mysql = require('mysql');
//Хеширование паролей
const bcrypt = require('bcrypt');
const saltRounds = 10;
//Отправка Http-запросов
const axios = require('axios');
var pool = mysql.createPool({
connectionLimit : 10,
host: "localhost",
user: "root",
password: "",
database: "NodeJS"
});
router.use(
session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
maxAge : new Date(Date.now() + 3600000),
expires : new Date(Date.now() + 3600000)
})
);
//Инициализация
router.get('/login', upload.array(), function(req, res, next) {
if (req.session.userId)
{
pool.query('SELECT * from user WHERE id = ?', [req.session.userId], function (error, results, fields)
{
if (error) res.json({error:true,massage:error.sqlMessage})
if (results.length!=0) {res.json({login:results[0].login,massage:"Вы авторизованы",error:false})}
})
}
else
{
res.json({login:false})
}
})
/**
* Регистрация
*
*/
router.post('/login', upload.array(), function(req, res, next) {
if (req.session.userId)
{
pool.query('SELECT * from user WHERE id = ?', [req.session.userId], function (error, results, fields)
{
if (error) res.json({error:true,massage:error.sqlMessage})
if (results.length!=0) res.json({login:results[0].login,massage:"Вы уже авторизованы",error:false})
})
}
else
{
bcrypt.hash(req.body.password, saltRounds, function(err, hash) {
var post = {login:req.body.login,password:hash};
pool.query('INSERT INTO user SET ?', post, function (error, results, fields)
{
if (error) {
var massage=error.sqlState==='23000'?'Такой логин уже существует':error.code
res.json({massage:massage,error:true});
}
else if (results.affectedRows){
if (req.body.remember) req.session.userId=results.insertId
res.json({login:req.body.login,userId:results.insertId,error:false})
}
});
});
}
})
/**
* Выход
*/
router.post('/logout', upload.array(), function(req, res, next) {
req.session.destroy(function(err) {})
res.json({login:false})
})
/**
* Список сессий
*/
router.get('/ses', function(req, res, next) {
res.json(req.session)
})
/**
* авторизация
*/
router.post('/signin', upload.array(), function(req, res, next) {
if (req.session.userId)
{
pool.query('SELECT * from user WHERE id = ?', [req.session.userId], function (error, results, fields)
{
if (error) res.json({error:true,massage:error.sqlMessage})
if (results.length!=0) {res.json({login:results[0].login,massage:"Вы уже авторизованы",error:false})}
})
}
else
{
pool.query('SELECT * from user WHERE login = ?', [req.body.login], function (error, results, fields) {
if (error) res.json({error:true,massage:error.sqlMessage})
if (results.length!=0)
{
let id = results[0].id;
let login = results[0].login;
let hash = results[0].password;
bcrypt.compare(req.body.password, hash, function(err, resp) {
if (resp) {
if (req.body.remember) req.session.userId=id
res.json({login:login})
}else{
res.json({massage:'Не верный пароль',error:true})
}
});
}
else{res.json({massage:"Не верный логин",error:true})}
});
}
})
/**
* Получение данных
*/
router.get('/Api', function(req, res, next) {
if (req.session.userId)
{
axios.get('https://newsapi.org/v2/top-headlines?sources=techcrunch&apiKey=35e8030390764ebfa81a7f9ae78ad05a')
.then(function (response) {
res.send(response.data)
})
.catch(function (error) {
console.log(error);
})
}
else
{
res.json({massage:"Вы не авторизированы",error:true})
}
})
module.exports = router;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment