加密過程使用了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
}
複製代碼