【Node.js+koa--后端管理系统】用户登录接口设计 | 登录验证 | 登录返回凭证(令牌)

发布于:2022-12-14 ⋅ 阅读:(751) ⋅ 点赞:(0)

🍳作者: 贤蛋大眼萌,一名很普通但不想普通的程序媛 \color{#FF0000}{贤蛋 大眼萌 ,一名很普通但不想普通的程序媛} 贤蛋大眼萌,一名很普通但不想普通的程序媛🤳

🙊语录: 多一些不为什么的坚持 \color{#0000FF}{多一些不为什么的坚持} 多一些不为什么的坚持

📝本文章收录于专栏:Node.js+koa–后端管理系统

💭 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网 \color{#ff7f50}{眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台--牛客网} 眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂offer,程序员的必备刷题平台牛客网

👉🏻点击跳转刷题网免费注册学习

🥩 登录接口设计

① 编写流程

  • 登录用户路由router编写;
  • 处理登录函数Login的controller编写;
  • 操作数据库的service编写;

② 登录用户基本逻辑设计

image-20220524162516281

image-20220524163725678

image-20220524162544061

🍬 编写验证登录中间件

//目录:@/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)

image-20220526161358609

② 派发令牌

image-20220526162608419

③ 编写验证测试接口

image-20220526181222979

④ 验证令牌(授权中间件)

//目录:@/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}{一步一个脚印,你走过的路,每一步都算数。} 一步一个脚印,你走过的路,每一步都算数。 每一次进步都是对自己努力的肯定。如果读了文章有收获,不如一起来学习,一起进步吧。传送门🚪刷题神器
image-20220917104224568


在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到