当前位置: 代码迷 >> 综合 >> node koa2 实现登录
  详细解决方案

node koa2 实现登录

热度:67   发布时间:2023-12-01 00:24:16.0

实现登录

session的处理基于koa-generic-sessionkoa-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
}

注意:必须是在 路由注册之前创建连接 ,因为在路由的业务函数中使用到了sessionredis,所以必须在此之前创建

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}`})
}))

配置cookieredis的相关信息

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
}

业务逻辑

  1. 输入登录 账号与密码

将输入的密码进行加密(数据库中的密码也是加密的),与数据库进行比对,如果相同则登录成功,否则失败

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中

  相关解决方案