fjh
Version:
博客api
155 lines (148 loc) • 9.08 kB
JavaScript
const db = require('../mysql/index');
const jwt = require('jsonwebtoken');
const config = require('../public/config');
const emailVerif = require('../public/emailVerif');
// 注册
exports.reguser = (req, res) => {
const { username, password, email, captcha, avatar } = req.body;
const times = new Date();
const sqlStr1 = 'select * from captchadata where captchaUser = ? and captchaPassword = ? and captchaEmail = ? and captcha = ? ';
const sqlStr2 = 'insert into userdata set ?';
const sqlStr3 = `delete from captchadata where captchaEmail = '${email}' and captchaUser = '${username}'`;
db.getConnection((err, connection) => {
connection.query(sqlStr1, [username, password, email, captcha], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length == 0) { return res.send({ status: 0, message: '注册用户失败,请稍后再试!' }) };
connection.query(sqlStr2, { username: username, password: password, email: email, avatar: avatar, token: verify, registrationTime: times.toLocaleString() }, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows != 1) { return res.send({ status: 0, message: '注册用户失败,请稍后再试!' }) };
connection.query(sqlStr3, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
res.send({ status: 200, message: '注册成功!' });
})
})
})
db.releaseConnection(connection);
})
}
// 发送验证码
exports.captcha = (req, res) => {
const { username, password, email, avatar } = req.body;
const times = new Date();
const verify = emailVerif.randomFns();
const sqlStr1 = 'select * from userdata where username = ? or email = ?';
const sqlStr2 = 'insert into captchadata set ?';
db.getConnection((err, connection) => {
connection.query(sqlStr1, [username, email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length == 1) { return res.send({ status: 0, message: '用户名或账号被占用!' }) };
connection.query(sqlStr2, { captchaUser: username, captchaPassword: password, captchaEmail: email, captcha: verify, times: times.toLocaleString() }, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows !== 1) { return res.send({ status: 0, message: '验证码发送失败,请稍后再试!' }) };
emailVerif.captcha(verify, email);
res.send({ status: 200, message: '验证码发送成功!' });
})
})
db.releaseConnection(connection);
})
}
// 登录
exports.login = (req, res) => {
const { email, password } = req.body;
const times = new Date();
const sqlStr1 = 'select * from userdata where password = ? and email = ?';
db.getConnection((err, connection) => {
connection.query(sqlStr1, [password, email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length != 1) { return res.send({ status: 0, message: '账号或密码错误!' }) };
const user = { ...results[0], password: '', avatar: '', token: '' };
const tokenStr = 'Bearer ' + jwt.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn });
const sqlStr2 = `update userdata set token = '${tokenStr}', logonTime = ? where email = ? and password = ? `;
connection.query(sqlStr2, [times.toLocaleString(), email, password], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows !== 1) { return res.send({ status: 0, message: '登录失败,请稍后再试!' }) };
res.send({ status: 200, message: '登录成功!', token: tokenStr })
})
})
db.releaseConnection(connection);
})
}
// 发送登录验证码与修改密码
exports.sendcaptcha = (req, res) => {
const { email } = req.body;
const times = new Date();
const verify = emailVerif.randomFns();
const sqlStr1 = 'select * from userdata where email = ?';
const sqlStr2 = 'insert into captchadata set ?';
db.getConnection((err, connection) => {
connection.query(sqlStr1, [email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length != 1) { return res.send({ status: 0, message: '该账号未注册!' }) };
connection.query(sqlStr2, { captchaEmail: email, captcha: verify, times: times.toLocaleString() }, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows !== 1) { return res.send({ status: 0, message: '发送验证码失败,请稍后再试!' }) };
emailVerif.captcha(verify, email);
res.send({ status: 200, message: '验证码发送成功!' });
})
})
db.releaseConnection(connection);
})
}
// 验证码登录
exports.captchalogin = (req, res) => {
const { email, captcha } = req.body;
const times = new Date();
const sqlStr1 = 'select * from userdata where email = ?';
const sqlStr2 = 'select * from captchadata where captchaEmail = ? and captcha = ? ';
const sqlStr4 = `delete from captchadata where captchaEmail = '${email}'`;
db.getConnection((err, connection) => {
connection.query(sqlStr1, [email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length != 1) { return res.send({ status: 0, message: '该账号未注册!' }) };
connection.query(sqlStr2, [email, captcha], (err, results) => {
if (results.length !== 1) { return res.send({ status: 0, message: '登录失败,请稍后再试!' }) };
if (err) return res.send({ status: 0, message: err.message });
const user = { ...results[0] };
const tokenStr = 'Bearer ' + jwt.sign(user, config.jwtSecretKey, { expiresIn: config.expiresIn });
const sqlStr3 = `update userdata set token = '${tokenStr}', logonTime = ? where email = ?`;
connection.query(sqlStr3, [times.toLocaleString(), email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows !== 1) { return res.send({ status: 0, message: '登录失败,请稍后再试!' }) };
connection.query(sqlStr4, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
res.send({ status: 200, message: '登录成功!', token: tokenStr })
})
})
})
})
db.releaseConnection(connection);
})
}
// 修改密码与忘记密码
exports.revise = (req, res) => {
const { password, email, captcha } = req.body;
const times = new Date();
const sqlStr1 = 'select * from userdata where email = ?';
const sqlStr2 = 'select * from captchadata where captchaEmail = ? and captcha = ? ';
const sqlStr3 = `update userdata set password = ?, reviseTime = ? where email = ?`;
const sqlStr4 = `delete from captchadata where captchaEmail = '${email}'`;
db.getConnection((err, connection) => {
connection.query(sqlStr1, [email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.length != 1) { return res.send({ status: 0, message: '该账号未注册!' }) };
connection.query(sqlStr2, [email, captcha], (err, results) => {
if (results.length !== 1) { return res.send({ status: 0, message: '修改密码失败,请稍后再试!' }) };
if (err) return res.send({ status: 0, message: err.message });
connection.query(sqlStr3, [password, times.toLocaleString(), email], (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
if (results.affectedRows !== 1) { return res.send({ status: 0, message: '修改密码失败,请稍后再试!' }) };
connection.query(sqlStr4, (err, results) => {
if (err) return res.send({ status: 0, message: err.message });
res.send({ status: 200, message: '修改密码成功!' })
})
})
})
})
db.releaseConnection(connection);
})
}