koa2+sequelize 实现登录注册-爱代码爱编程
koa2+sequelize 实现登录创建用户
这次的登录注册为后台的简单登录及创建用户
用到的模块:
"bcryptjs": "^2.4.3",
"jsonwebtoken": "^8.5.1",
"koa": "^2.7.0",
"koa-bodyparser": "^4.2.1",
"koa-json": "^2.0.2",
"koa-router": "^7.4.0",
"mysql2": "^2.2.5",
"node-uuid": "^1.4.8",
"sequelize": "^6.3.5"
model部分
const { DataTypes } = require("sequelize");
const db = require('../config/db')
const sequelizeConfig = db.sequelize
// 后台登录账号管理
const Antd_User = sequelizeConfig.define("antd-user", {
username: DataTypes.TEXT, // 用户名
password: DataTypes.TEXT, // 密码
role:{type:DataTypes.TEXT,defaultValue:'user'}, // 角色/权限
avator:{
type:DataTypes.TEXT,
defaultValue:'initAvator.png'
},
user_id:DataTypes.TEXT,
status:{
type:DataTypes.INTEGER,
defaultValue:1 // 账户状态 1:启用 2:停用
}
});
module.exports = {Antd_User}
config/db 为sequelize连接数据库
可根据需求添加ip,lastLoginTime等字段
接口部分
const Koa = require('koa')
const router = require('koa-router')()
const json = require('koa-json')
const tools = require('../config/untils')
const mUsers = require('../model/user')
const userId = require('node-uuid')
const errorTips = require('../config/errorTips')
const jwt = require('jsonwebtoken')
const app = new Koa()
app.use(json())
router.prefix('/users')
router.post('/antd-register',async ctx =>{
const postParams = ctx.request.body
const bundleUserName = await mUsers.Antd_User.findAll({where:{username:postParams.username}})
// 判断用户名是否存在
if(bundleUserName.length > 0){
ctx.body = errorTips.error100001
return
}
// 校验密码
var regex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z]).{8,30}');
if (!regex.test(postParams.password)) {
ctx.body = errorTips.error100002
return
}
// 判断两次输入的密码一致
if(postParams.password !== postParams.confirmPassword){
ctx.body = errorTips.error100004
return
}
// insert 新用户
const result = await mUsers.Antd_User.create({
username:postParams.username,
password:tools.bcryptOptions(postParams.password),
user_id:userId.v4().replace(/-/g, '')
})
ctx.body = {
code:0,
msg:'创建成功',
data:result
}
})
router.post('/antd-login',async ctx =>{
const postParams = ctx.request.body
const bundleUserName = await mUsers.Antd_User.findAll({where:{username:postParams.username}})
const getCheck = tools.checkUser(postParams.password,bundleUserName[0].password)
// 账号不存在 或者 密码错误
if(!getCheck || bundleUserName.length === 0){
ctx.body = errorTips.error100003
return
}
ctx.body = {
code:0,
msg:'登录成功',
data:{
token:`Bearer ${jwt.sign({userId:bundleUserName.user_id},'batman580',{expiresIn:3600*24*15})}`
}
}
})
module.exports = router
使用jsonwebtoken必须以Bearer 开头传递给前端
错误信息
const t = 'error'
const errorTips = {
[`${t}100001`]:{code:100001,msg:'用户名已存在'},
[`${t}100002`]:{code:100002,msg:'密码必须是8-30位(必须包含字母、数字)'},
[`${t}100003`]:{code:100003,msg:'账号或密码错误'},
[`${t}100004`]:{code:100003,msg:'创建失败,密码不一致'}
}
module.exports = errorTips
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/MengZhongZhuiXing/article/details/111034393