美团项目 --- 登录注册3

❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp

一、server文件夹设计

1.1 开始配置数据库mongodb和对象模型管理工具mongoose:

在这里插入图片描述

1.2 在配置一些相对的登陆注册用到的接口:

在这里插入图片描述

二、mongodb数据库、Redis服务、smtp邮箱服务

2.1 开始如何配置一个mongodb/redis/smtp的基础配置config.js

① 配置连接mongodb的主机号和端口
② 配置redis主机号和端口
② 配置一下腾讯邮箱接口host及smtp服务接口,拿注册验证码:
直达路径: 登陆qq邮箱 === 设置 === 账户 === pop3…那栏
默认开启服务中都是关闭的,需要启动前两个主要实现项目服务也可以操作邮箱的功能,最后拿到授权码
在这里插入图片描述

/**
 * describe: 数据库mongodb、redis服务、smtp邮箱服务基本配置
 * author: umbrella
 * date: 2019-6-28
 * --------------------说明------------------------
 * 导出一个对象export default即为配置mongodb的
 * --连接默认mongondb(默认端口27017)/{数据库名称}
 * --配置redis设置只读host(当前主机号)|| 只读端口6379(默认不要乱改)
 * --配置smtp邮箱服务,固定host(stmp.qq.com)|| 开启pop功能的对应邮箱 || 填写功能授权码pass
 *   模拟随机码code方法 || 验证码有效时间expire
 */
export default {
    
    dbs: 'mongodb://127.0.0.1:27017/mtapp', 
    redis:{   
        get host(){
            return '127.0.0.1'  
        },
        get port(){
            return 6379         
        }
    },
    smtp:{
        get host(){
            return 'stmp.qq.com'		// 验证的邮箱服务smtp
        },
        get user(){
            return '[email protected]'  // 发送验证的邮箱
        },
        get pass(){
            return 'hrhypacrzilkedai'   // 授权码
        },
        get code(){
            return ()=>{
                return Math.random().toString(16).slice(2,6).toUpperCase();  // 生成一个16进制的4位大写验证码
            }
        },
        get expire(){
            return ()=>{
                return new Date().getTime()+60*60*1000   // 可设置为 1h 或者 1min 自定
            }
        }

    }
}
2.2 开始写关于用户登陆注册登出验证的接口:

在这里插入图片描述

三、mongoose用户模型配置

当前安装的版本:

在这里插入图片描述

/**
 * descripe: 创建mongoose数据库模型面板,并配置必须的库类型
 * author: umbrella
 * date: 2018-6-28PM16:42:26
 * -------------------说明------------------
 * --导入所需的moogoose模型包
 * --定义Schema模型,每一个schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型
 * --填写模型所需要的表结构
 * --导出mongoose模型UserSchema
 */
import mongoose from 'mongoose'
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)

四、实现接口interface的users.js

引入的包及版本:

  • koa-router @7.4.0
  • koa-redis @3.1.2
  • nodemailer @4.6.8

五、配置axios基础配置

安装版本:

  • axios @0.18.0

官网参考:http://www.axios-js.com/zh-cn/

/**
 * descripe: 封装前后端通信axios配置
 * author: umbrella
 * date: 018-6-28PM17:24:28
 * ---------------说明----------------
 * --导入所需的axios包,创建axios实例
 * --配置基础的URL,请求超时timeout,及公共头部headers
 * --参考文档:http://www.axios-js.com/docs/#Creating-an-instance
 * --导出该axios接口实例instance
 */
import axios from 'axios'

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

export default instance

六、配置passport相关配置

安装所需要的导包:

  • koa-passport ^4.1.1
  • passport-local ^1.0.0
/**
 * descripe: 配置相关的passpost
 * author: umbrella
 * date: 018-6-28PM19:44:18
 * ---------------说明----------------
 * --导包passport 适用于koa的passport实现路由进入前登陆验证 || 同理适用于koa的Local策略包 ||
 *   导入mongoose模型
 * --参考passport官网:http://www.passportjs.org/
 * --使用本地策略LocalStrategy实现简单的登陆查询,注册添加的校验
 * --参数说明 username用户输入的账户名 || password用户输入的密码 || done回调函数
 * --导出passport
 */
import passport from 'koa-passport'
import LocalStrategy from 'passport-local'
import UserModel from '../../dbs/models/users'

passport.use(new LocalStrategy(async function(username,password,done){
    // 使用koa特色的异步async和await完成校验
    let where = {
        username
    };
    // 在数据库mongoose模型中查询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,'用户名不存在')
    }
}))

// 用户每次登陆成功时,将数据存储进筛选中,然后通过筛选读取用户对象序列化及反序列化
passport.serializeUser(function(user,done){
    done(null,user)
})

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

export default passport

七、定义注册、登录、发送验证码、登出、获取用户信息五个接口

安装需要的包及版本号:

  • koa-router ^7.4.0
  • koa-redis ^3.1.3
  • nodemailer ^4.6.8

需要用到的配置:User passport axios Email

↓ 配置一下当前接口的公共路径/users,因此这五个接口的前缀都必须要有这个路径拼接
↓ 拿到Redis的存储服务容器,这里储存用户
↓ 配置所需的接口router
↓ 导出router

八、最后将写好的路由加到sever启动文件内index.js

导入相关的包:

  • mongoose
  • bodyParser 处理axios中的post请求所需的参数,如果没有引入post所需的参数就拿不到
  • session 项目登录注册用配合koa拿session,而不是用cookie
  • Redis
  • json 主要是美化一下服务端向客户端发送data的输出格式

配置session相关
→ 配置session存储方式权限

app.keys = ['mt','keyskeys']   // 配置keys两个值,一个是项目的缩写,另外一个是密钥
app.proxy = true  // 允许跨域
app.use(session({key: 'mt',prefix: 'mt:uid', store: new Redis()})) // 给加key值,加前缀好识别,在开启在Redis的储存权限

配置post的相关处理
→ 扩展post的参数获取类型,并使用json库美化一下

app.use(bodyParser({extendTypes:['json','form','text']}))
app.use(json())

将模型对象mongoose真正的连接数据库mongodb
→ 官方配置,dbconfig.dbs就是config.js中配置的数据库url

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

配置passport相关
→ 初始化passport并且开启passport的session对接功能

app.use(passport.initialize())
app.use(passport.session())

使用路由routes
→ 这里的写法可以参考: https://www.jianshu.com/p/fef91266a44c

app.use(users.routes()).use(users.allowedMethods())

九、启动redis服务和数据库mongodb

开两个cmd:
在redis安装目录中启动cmd输入:redis-server
出现这个说明启动成功并且以连接端口
在这里插入图片描述
在mongodb中启动cmd输入:mongod
报错处理…code100看写的这篇博客:
https://blog.csdn.net/Umbrella_Um/article/details/99662011
在这里插入图片描述
成功后的图显示这个,此时访问http:127.0.0.1:27017/是可以出现博客中的校验那部分的

十、启动服务npm run dev

成功启动即可

❤ 项目源码 ❤
GitHub地址:https://github.com/Umbrella001/mtapp

发布了134 篇原创文章 · 获赞 80 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Umbrella_Um/article/details/99018052