🍳作者: 贤蛋大眼萌,一名很普通但不想普通的程序媛 \color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛} 贤蛋大眼萌,一名很普通但不想普通的程序媛🤳
🙊语录: 多一些不为什么的坚持 \color{#0000FF}{多一些不为什么的坚持} 多一些不为什么的坚持
📝本文章收录于专栏:Node.js+koa–后端管理系统
💭 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网 \color{#ff7f50}{眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台--牛客网} 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台−−牛客网
用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)
🥩 登录接口设计
① 编写流程
- 登录用户路由router编写;
- 处理登录函数Login的controller编写;
- 操作数据库的service编写;
② 登录用户基本逻辑设计
🍬 编写验证登录中间件
//目录:@/middleware/auth_middleware.js
// 用户登录验证中间件
const verifyLogin = async(ctx,next)=>{
console.log('验证登录成功的midleware');
// 1. 获取用户名和密码
const {name, password} = ctx.request.body
// 2.判断用户名和密码是否为空
if(!name ||!password || name ===''||password ===''){
const error = new Error(errorTypes.NAME_OR_PASSWORD_IS_REQUIRED)
return ctx.app.emit('error',error,ctx)
}
// 3. 判断用户是否存在
const result = await userServiece.getUserByName(name);
const user = result[0];
// console.log(user);
if(!user){
const error = new Error(errorTypes.USER_DOES_NOT_EXISTS)
return ctx.app.emit('error',error,ctx)
}
// 4. 判断密码是否与数据库的存储一致
if(md5password(password) != user.password){
const error = new Error(errorTypes.PASSWORD_IS_INCORRENT)
return ctx.app.emit('error',error,ctx)
}
ctx.user = user;
await next();
}
🍚 登录返回凭证
① 生成公钥和私钥
注意:这里补充一下cookie和token的相关知识 http://t.csdn.cn/u4tO1
引入keys(参考http://t.csdn.cn/u4tO1 )–>将公钥和私钥写入配置文件下(src/app/config.js)
② 派发令牌
③ 编写验证测试接口
④ 验证令牌(授权中间件)
//目录:@/middleware/auth_middleware.js
const verifyAuth = async(ctx,next)=>{
console.log('授权验证middleware(判断是否登录)');
// 1. 获取token
const authorization = ctx.headers.authorization;
if (!authorization) {
const error = new Error(errorTypes.UNAUTHORIZATION);
return ctx.app.emit('error', error, ctx);
}
const token = authorization.replace('Bearer ','')
// 2. 验证token
try{
const result = jwt.verify(token,PUBLIC_KEY,{
algorithms:["RS256"]
});
ctx.user = result
// console.log(ctx.user)
await next();
}catch(err){
const error = new Error(errorTypes.UNAUTHORIZATION)
ctx.app.emit('error',error,ctx)
}
}
PS:
求知无坦途,学问无捷径。👣 一步一个脚印,你走过的路,每一步都算数。 \color{#ff7f50}{一步一个脚印,你走过的路,每一步都算数。} 一步一个脚印,你走过的路,每一步都算数。 每一次进步都是对自己努力的肯定。如果读了文章有收获,不如一起来学习,一起进步吧。传送门🚪刷题神器
本文含有隐藏内容,请 开通VIP 后查看