Created
October 17, 2018 09:02
-
-
Save Denkong/31cc4df469d1dd03ec0ba9d3b1d7aaf2 to your computer and use it in GitHub Desktop.
MySql Session for Express
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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