vue全家桶+Koa2开发笔记(7)--登陆注册功能

1 文件结构:pages中放置页面代码;server 分为 dbs 和interface两个文件夹;

dbs设置有关数据库的代码;interface设置接口信息;

vue全家桶+Koa2开发笔记(7)--登陆注册功能

2.2 先看dbs的,在dbs的配置文件config.js中定义:

export default {                  //该文件是配置文件,在 server/index 和interface 中引入使用。
    dbs:'mongodb://127.0.0.1:27017/student',//配置数据库host和数据库名字student
    redis:{                       //配置redis快速存储的数据库地址和端口
      get host(){
        return '127.0.0.1'
      },
      get port(){
        return 6379
      }
    },
    smtp:{                      //配置发送邮箱的信息
      get host(){
        return 'smtp.qq.com'    //smtp发送邮件的协议
      },
      get user(){
        return '2751581738@qq.com'  //邮箱地址
      },
      get pass(){
        return 'rxufkzgrrfcodhei'  //授权码
      },
      get code(){               //发送的四位随机码
        return ()=>{
          return Math.random().toString(16).slice(2,6).toUpperCase()
        }
      },
      get expire(){
        return ()=>{           //设置验证码的设置有效期
          return new Date().getTime()+60*60*1000
        }
      }
    }
  }
  

然后在数据库的dbs中model中新建数据表:

import mongoose from 'mongoose' //使用 mongoose 新建数据库的表 users
const Schema = mongoose.Schema
const UserSchema=new Schema({
  username:{
    type:String,
    unique:true,
    require:true
  },
  password:{
    type:String,
    require:true
  },
  email:{
    type:String,
    require:true
  }
})

export default mongoose.model('User',UserSchema)

还要在server/index.js中

import mongoose from 'mongoose'
mongoose.connect(dbConfig.dbs,{
  useNewUrlParser:true
})

处理完数据库之后,再来设置接口,在interface文件夹中:

首先在interface/utils文件夹下新建 axios和passport两个文件:

import axios from 'axios'

const instance = axios.create({
  baseURL:`http://${process.env.HOST||'localhost'}:${process.env.PORT||3000}`,
  timeout:2000,
  headers:{

  }
})
export default instance

然后设置 passport文件:

/*koa-passport是koa的一个中间件,它实际上只是对passport的一个封装。
利用koa-passport可以简便的实现登录注册功能,不但包括本地验证*/
/*
passport的主要功能就是能够提供一个用户鉴权的框架,并把鉴权得到的用户身份供后续的业务逻辑来使用。
*/
import passport from 'koa-passport'
/*
网络中最常用的方式就是通过用户名和密码进行认证,提供这种认证的策略是 passport-local 。
此模块允许您使用Node.js应用程序中的用户名和密码进行身份验证。
通过插入Passport,本地身份验证可以轻松而不显眼地集成到任何支持Connect式中间件(
包括Express)的应用程序或框架中。

*/
import LocalStrategy from 'passport-local'
import UserModel from '../../dbs/models/users'//该文件定义了数据库的基本框架
//连接数据库
passport.use(new LocalStrategy(async function(username,password,done){
  let where = {
    username
  };
  let result = await UserModel.findOne(where)
  if(result!=null){
    if(result.password===password){
      return done(null,result)
    }else{
      return done(null,false,'密码错误')
    }
  }else{
    return done(null,false,'用户不存在')
  }
}))

/*
序列化和反序列化的对象是session,是将信息存入session,和将信息从session中取出来。
(要存入的变量可以是一个String或者Number或Object)

序列化函数:serializeUser,在ctx.login(id)函数调用时触发,其中的参数会传给serializeUser函数作为其第一个参数,
反序列化函数:deserializeUser,会自动解析用户请求中session的信息,并作为回调函数的第一个参数,

在典型的网络应用中,登录请求中包含验证用户的认证信息。如果认证成功,
用户浏览器中通过 cookie 创建并保存 sessionID。随后所有的请求不再需要验证,
而是通过 sessionID 来识别用户。Passport 可以将 session 中的用户信息序列化或反序列化,
以此支持 session 机制。
*/

passport.serializeUser(function(user,done){
  done(null,user)
})

passport.deserializeUser(function(user,done){
  return done(null,user)
})

export default passport

详见:  koa2 使用passport权限认证中间件

注意几点:

1:定义的策略

passport.use(new LocalStrategy(async function(username,password,done){
  ...
}))

会在下面定义接口时调用:

Passport.authenticate('local', function(err, user, info, status) {
  ...      
}

 

上一篇:koa2 接收post参数


下一篇:.css.map文件有啥用?