喵喵项目-后台登入(上)

一、项目预览

登入页

在这里插入图片描述

注册页

在这里插入图片描述

找回密码

在这里插入图片描述

登入成功页

在这里插入图片描述

二、开发前准备

1.安装Express!

现在宝塔面板 软件商店中安装PM2管理器
在这里插入图片描述

在宝塔终端上输入以下命令

npm install -g express-generator

2.创建项目 miaomiaoserver

在终端cd进入你想要创建这个项目的目录下
在分别输入以下命令来启动程序

// 创建喵喵项目
// 进入项目文件
// 安装自带的模块
// 安装mongoose模块操纵数据库
// 启动项目

express -e miaomiaoserver
cd miaomiaoserver
cnpm -i
cnpm i -s mongoose
npm start

输入localhost:3000显示以下页面证明项目创建成功
在这里插入图片描述
因为是在宝塔下创建的项目 所以我在自己的电脑上输入ip地址:3000测试

3.安装MongoDB数据库

在这里插入图片描述

4.项目连接MongoDB数据库

在miaomiaoserver项目目录下创建untils文件夹,文件夹下新建config.js

var mongoose = require('mongoose');

var Mongoose = {
    url : 'mongodb://localhost:27017/miaomiao',
    connect(){
        mongoose.connect(this.url,{ useNewUrlParser: true, useUnifiedTopology: true } ,(err)=>{
            if(err){
                console.log('数据库连接失败');
                console.log(err)
                console.log('数据库连接失败');
                return
            }
            console.log('数据库连接成功');
        })
    }
};

module.exports = {
    Mongoose,
};

然后在app.js中引入

var { Mongoose } = require('./untils/config.js');
Mongoose.connect();

5.创建miaomiao数据库

在这里我用的是Robomong这个可视化窗口来连接mongdb然后创建数据库
在这里插入图片描述
提示:这边电脑上连接的是服务器里面的数据库所以要自己的服务器ip地址加上27017,而且必须要放行27017端口才能连接
在这里插入图片描述
然后在Robomong里创建miaomiao数据库即可

三、创建用户接口

1.创建对外的接口

在routes下的users.js文件中创建对外接口

var usersController = require('../controllers/users.js')

router.post('/login' , usersController.login);
router.post('/register' , usersController.register);
router.get('/verify' , usersController.verify);
router.get('/logout' , usersController.logout);
router.get('/getUser' , usersController.getUser);
router.post('/findPassword' , usersController.findPassword);
router.get('/verifyImg' , usersController.verifyImg);

2.封装对外的接口

创建controllers文件夹,然后创建users.js文件,在文件内部写好方法


var login = async (req,res,next)=>{

};

var register = async (req,res,next)=>{
   
};

var verify = async (req,res,next)=>{

};

var logout = async (req,res,next)=>{
    
};

var getUser = async (req,res,next)=>{
    
};

var findPassword = async (req,res,next)=>{
  
};

var verifyImg = async(req,res,next)=>{

};

module.exports = {
    login,
    register,
    verify,
    logout,
    getUser,
    findPassword,
    verifyImg,
};

3.完善verify接口

Ⅰ、开启邮箱验证

登入qq邮箱进入设置,点击账户设置,然后开启POP3/SMTP和IMAP/SMTP服务服务,记住生成的授权码
在这里插入图片描述

Ⅱ、启用Nodemailer

安装Nodemailer

npm i -s nodemailer

在配置untils文件下的config.js中写连接邮箱

var nodemailer = require('nodemailer');

var Email = {
    config : {
        host: "smtp.qq.com", //指定为qq邮箱
        port: 587,
        auth: {
            user: '********', // qq邮箱账号
            pass: '********', // 生成的授权码
        }
    },
    get transporter(){
        return nodemailer.createTransport(this.config);
    },
    get verify(){
        return Math.random().toString().substring(2,6);
    },
};

module.exports = {   
	Email
};

Ⅲ、开启邮箱验证

var { Email } = require('../untils/config.js'); // 引入模块

var verify = async (req,res,next)=>{
   var email = req.query.email;
   var verify = Email.verify;
   req.session.verify = verify;
   req.session.email = email;
    var mailOptions ={
        from: '喵喵网',
        to: email,
        subject: "喵喵网邮箱验证码",
        text: "验证码" + verify
    };

    Email.transporter.sendMail(mailOptions,(err)=>{
        if(err){
            res.send({
                msg : '验证码发送失败',
                status : -1
            })
        }else{
            res.send({
                msg : '验证码发送成功',
                status : 0
            })
        }
    });

};

Ⅳ、验证接口

验证接口我是在Postman中进行验证
1.选择get方法
2.选择需要验证的接口
3.输入需要接受验证码的邮箱
4.发送请求
5.当看到验证码发送成功的时候证明输入发送成功
6.收到验证码
在这里插入图片描述

4.完善register接口

Ⅰ、接收注册信息

为了让在verify 接口中接受到的数据能够在register接口中得到
1.安装第三方模块session中间件

npm install express-session

2.在app.js中进行配置

var session = require('express-session');
app.use(session({
    secret: '$#$#$#', //用来加密的属性,复杂一点都行
    name : 'sessionId',
    resave: false,
    saveUninitialized: false,
    cookie: { // 过期时间
      maxAge : 1000*60*60
    }
}));

Ⅱ、完善models层-数据库存储

新建models文件创建users.js文件用来在mongdb数据库存储交互

var mongoose = require('mongoose');
mongoose.set('useCreateIndex',true);

var UserSchema = new mongoose.Schema({
    username : { type : String , require : true , index : { unique : true } },
    password : { type : String , require : true },
    email : { type : String , require : true , index : { unique : true } },
    date : { type : Date , default : Date.now() },
});

var UserModel = mongoose.model('user',UserSchema);
UserModel.createIndexes();

var save = (data)=>{
    var user = new UserModel(data);
    return user.save()
            .then(()=>{
                return true;
            })
            .catch(()=>{
                return false;
            });
};

module.exports = {
    save,
}

Ⅲ、验证注册信息是否匹配

var UserModel = require('../models/users.js');
var register = async (req,res,next)=>{
    var { username , password , email , verify } = req.body;
    if( email !== req.session.email || verify !== req.session.verify ){
        res.send({
            msg : '验证码输入错误',
            status : -1
        });
        return;
    }
    var result = await UserModel.save({
        username,
        password,
        email
    });
    if(result){
        res.send({
            msg : '注册成功',
            status : 0
        });
    }else{
        res.send({
            msg : '注册失败',
            status : -2
        });
    }
    
};

Ⅳ、验证接口

先用verify接口发送验证码
在这里插入图片描述
需要注意的点:
1.选择post方法
2.选择Body数据 x-www-form-urlencoded
3.输入正确数据
4.发送请求
5.注册成功在这里插入图片描述
6.在数据库可视化工具中查看到注册的信息
在这里插入图片描述

5.完善login接口

Ⅰ、寻找匹配用户

在models下的users.js写个方法用来查找数据库里的数据

var findLogin = (data)=>{
    return UserModel.findOne(data);
}
module.exports = {
    findLogin,
}

Ⅱ、验证注册信息是否匹配

var login = async (req,res,next)=>{
    var { username , password ,verifyImg} = req.body;
    var result = await UserModel.findLogin({
        username,
        password
    });
    if(result){
    	req.session.username = username;// 用于记录是否登入账户
    	res.send({
        	msg : '登入成功',
           	status : 0
        });
    }else{
        res.send({
            msg : '用户名或密码输入错误',
            status : -1
        });
    }
};

Ⅲ、验证接口

输入刚注册的账户和密码,出现登入成功即表示登入成功
在这里插入图片描述

6.完善logout、getUser接口

Ⅰ、logout接口

var logout = async (req,res,next)=>{
    req.session.username = '';
    res.send({
        msg : '退出成功',
        status : 0
    });
};

Ⅱ、getUser接口

var getUser = async (req,res,next)=>{
    if(req.session.username){
        res.send({
        msg : '获取用户信息成功',
        status : 0,
        data : {
            username : req.session.username,
        }
    });
    }else{
        res.send({
        msg : '获取用户信息失败',
        status : -1
    });
    }
};

Ⅲ、验证接口

1.先登入
在这里插入图片描述

2.获取用户信息
在这里插入图片描述

3.退出登入
在这里插入图片描述
4.再次尝试获取用户信息
在这里插入图片描述

7.完善findPassword接口

Ⅰ、新建updatePassword方法

在models在的users.js文件下新建一个updatePassword方法,并添加对外接口

var updatePassword = (email , password)=>{
    return UserModel.update({email} , { $set : {password} })
            .then(()=>{
                return true;
            })
            .catch(()=>{
                return false;
            });
}
module.exports = {
    updatePassword,
}

Ⅱ、findPassword接口

var findPassword = async (req,res,next)=>{
    var { email , password , verify } = req.body;

    if( email === req.session.email && verify === req.session.verify ){
        var require = await UserModel.updatePassword(email , password);
        if(require){
            res.send({
                msg : '修改密码成功',
                status : 0
            })
        }else{
            res.send({
                msg : '修改密码失败',
                status : -1
            });
        }
    }else{
        res.send({
            msg : '验证码错误',
            status : -1
        });
    }
};

Ⅲ、验证接口

1.发送验证码
在这里插入图片描述
2.修改密码
在这里插入图片描述
3.验证是否修改成功
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值