实现登录
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_CONif (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({
// 配置cookiecookie: {
path:'/',httpOnly: true,// 生效时间maxAge:24*60*60*1000},// 配置redisstore:redisStore({
all:`${
REDIS_CON.host}:${
REDIS_CON.port}`})
}))
配置cookie
与redis
的相关信息
MySQL
// /db/mysql.js
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中