| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- const express = require('express');
- const router = express.Router();
- const crypto = require('crypto');
- const events = require('events');
- const db = require('../common/mysqlConnection');
- router.post('/', (req, res, next) => {
- if (req.session.signinStatus) {
- res.send({
- status: 'signedin',
- info: '已登录',
- url: '#/index'
- });
- } else {
- if (!req.body) {
- res.send({
- status: 'error',
- info: '参数错误,请重试'
- });
- } else {
- let captchaCode = req.body.captcha;
- if (req.session.captcha !== captchaCode) {
- res.status(200).send({
- status: 'error',
- info: '验证码错误'
- });
- } else {
- let emitter = new events.EventEmitter(),
- userId = req.body.userId,
- password = req.body.password;
-
- emitter.on('ok', () => {
- //更改登录状态
- req.session.signinId = userId;
- req.session.signinStatus = true;
- res.send({
- status: 'signedin',
- info: '登陆成功',
- url: '#/index'
- });
- });
-
- emitter.on('err', (err, errInfo) => {
- res.json({
- status: 'error',
- info: errInfo,
- error: err
- });
-
- });
- //从User表中取对应ID的密码和盐值
- emitter.on('selectUserPasswordAndSaltFromUserTable', () => {
- //定义SQL语句查询
- let pool = db.pool.adminDatabasePool;
- sqlString = 'SELECT password, salt FROM CloudSqlAdmin_Users WHERE userId = ?',
- value = [userId];
-
- db.queryArgs(pool, sqlString, value, (err, results, fields) => {
- if (err) {
- emitter.emit('err', err.err, '数据库查询出错');
- } else {
- let passwordHashOnDb = results[0].password,
- salt = results[0].salt;
-
- emitter.emit('checkUserPassword', passwordHashOnDb, salt);
- }
- });
- })
-
- //检测用户密码是否正确
- emitter.on('checkUserPassword', (passwordHashOnDb, salt) => {
- crypto.pbkdf2(password, salt, 4096, 256, 'SHA256', (err, hash) => {
- if (err) {
- emitter.emit('err', err, '后端逻辑出错,请联系管理员修复该问题');
- throw err;
- }
- hash = hash.toString('hex'); //生成密文
-
- if (hash != passwordHashOnDb) {
- emitter.emit('err', null, '用户名/邮箱或密码错误,请重试。');
- } else {
- emitter.emit('ok')
- }
- })
- });
- emitter.emit('selectUserPasswordAndSaltFromUserTable');
- }
- }
- }
- });
- module.exports = router
|