加密过程使用了node.js原生库cryptonode
const crypto = require('crypto')
// 密匙
const SECRET_KEY = 'WJiol_8776#' // 密匙是自定的,但须要保存好
// md5 加密
function md5(content) {
let md5 = crypto.createHash('md5')
return md5.update(content).digest('hex') // 把输出编程16进制的格式
}
// 加密函数
function genPassword(password) {
const str = `password=${password}&key=${SECRET_KEY}` // 拼接方式是自定的,只要包含密匙便可
return md5(str)
}
module.exports = {
genPassword
}
复制代码
注册新用户时使用上面utils/crypto.js中的genPassword方法对密码进行加密,而后存到数据库中。 存储完成后,数据库中user表的格式和下面类似: mysql
用户登录时,将用户输入的密码加密后和数据库中已加密的密码进行比对,一致则代表用户输入的密码正确。sql
const { exec, escape } = require('../db/mysql')
const { genPassword } = require('../utils/cryp')
const login = (username, password) => {
// In order to avoid SQL Injection attacks, you should always escape
// any user provided data before using it inside a SQL query.
// 避免SQL语句注入攻击,原理是插入一些特殊字符,让攻击片断失效
// You can do so using the mysql.escape(),
username = escape(username)
// 生成加密密码
password = genPassword(password)
password = escape(password)
const sql = ` select username, realname from users where username=${username} and password=${password} `
// console.log('sql is', sql)
return exec(sql).then(rows => {
return rows[0] || {}
})
}
module.exports = {
login
}
复制代码