Loading......
接上一篇文章,完成用户的登录功能;
实现思路:
- 获取请求数据
- 验证请求数据
- email 是否正确
- password是否正确
- 业务逻辑验证
- 用户是否存在
- 密码是否匹配
- 返回数据
- 生成token
- 返回数据
实现过程:
测试:
启动终端后用 postman 进行测试,显示用户登录成功
详细代码:
controller/users.js:
const {
validateCreateUser,
validateUserLogin,
} = require("../utils/validate/user_validate");
const HttpException = require("../exceptions/http_expetion");
const User = require("../models/user");
const { md5Password, matchPassword } = require("../utils/md5");
const { sign } = require("../utils/jwt");
// 注册用户
module.exports.createUser = async (req, res, next) => {
try {
let { username, password, email } = req.body.user;
// 数据校验
let { error, validate } = validateCreateUser(username, password, email);
if (!validate) {
throw new HttpException(422, "用户提交验证数据失败!!!", error);
}
//业务验证
//验证email是否存在
const exisUser = await User.findByPk(email);
if (exisUser) {
throw new HttpException(422, "用户邮箱已存在!!!", "email 存在");
}
//创建用户
//密码加密
const md5PWD = await md5Password(password);
//User model 存储数据库
const user = await User.create({
username,
password: md5PWD,
email,
});
//创建成功
if (user) {
console.log(user);
//创建token
let data = {};
data.username = username;
data.email = email;
data.token = await sign(username, email);
data.bio = null;
data.avatar = null;
//返回数据
res.status(201).json({
status: 1,
data,
message: "创建用户成功",
});
}
//整体异常捕获
} catch (error) {
next(error);
}
};
//登录用户
module.exports.login = async (req, res, next) => {
try {
//获取请求数据
let { email, password } = req.body.user;
//验证请求数据
let { error, validate } = validateUserLogin(email, password);
//验证业务逻辑
//用户是否存在
const user = await User.findByPk(email);
console.log("user", user);
if (!user) {
throw new HttpException(401, "用户不存在", "user not found!!!");
}
//密码是否匹配
const oldMd5Pwd = user.dataValues.password;
const match = matchPassword(oldMd5Pwd, password);
if (!match) {
throw new HttpException(401, "用户密码错误", "password not match!!!");
}
//返回数据
//生成token
delete user.dataValues.password;
user.dataValues.token = await sign(
user.dataValues.username,
user.dataValues.email
);
//返回数据
return res.status(200).json({
status: 1,
data: user.dataValues,
message: "用户登录成功",
});
} catch (err) {
next(err);
}
};
//获取用户
module.exports.getUser = async (req, res) => {
};
未完待续......