实现登录
session的处理基于koa-generic-session 和koa-redis
MySQL的处理基于mysql
安装插件
npm install koa-generic-session koa-redis
npm install mysql xss
引用
在app.js 文件中进行引用插件
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
引入配置内容(MySQL与redis)
const {REDIS_CON} = require('./conf/db')
配置MySQL与redis
const env = process.env.NODE_ENV
let MYSQL_CON
let REDIS_CON
if (env === 'dev') {
MYSQL_CON = {
host:'localhost',
user:'root',
password:'141733',
port:'3306',
database:'myblog'
}
REDIS_CON ={
port:6379,
host:'127.0.0.1'
}
}
if (env === 'production') {
MYSQL_CON = {
host:'localhost',
user:'root',
password:'141733',
port:'3306',
database:'myblog'
}
REDIS_CON ={
port:6379,
host:'127.0.0.1'
}
}
module.exports = {
MYSQL_CON,
REDIS_CON
}
注意:必须是在 路由注册之前创建连接 ,因为在路由的业务函数中使用到了session 和redis ,所以必须在此之前创建
redis与session
app.keys = ['giudglfypsiuv']
注意:app.keys 的值是一个数组,里面是一个字符串,这个字符串是可以 自己定义
app.keys 的作用:加密cookie
app.use(session({
cookie: {
path:'/',
httpOnly: true,
maxAge:24*60*60*1000
},
store:redisStore({
all:`${REDIS_CON.host}:${REDIS_CON.port}`
})
}))
配置cookie 与redis 的相关信息
MySQL
const mysql = require('mysql')
const {MYSQL_CONF} = require('../conf/db')
const con = mysql.createConnection(MYSQL_CONF)
con.connect()
function exec(sql) {
const promise = new Promise((resolve, reject) => {
con.query(sql, (err, result) => {
if (err) {
reject(err)
return
}
resolve(result)
})
})
return promise
}
module.exports = {
exec,
escape:mysql.escape
}
业务逻辑
- 输入登录 账号与密码
将输入的密码进行加密(数据库中的密码也是加密的),与数据库进行比对,如果相同则登录成功,否则失败
const data = await login(username, password)
const login = async (username, password) => {
username = escape(username)
password = genPassword(password)
password = escape(password)
const sql = `
select username, realname from users where username=${username} and password=${password};
`
const rows = await exec(sql)
return rows[0] || {}
}
注:genPassword 函数是封装的加密函数
登录成功,如果在该浏览器中第一次登录,那么就设置cookie以及记录到redis中
|