Egg.js实战:重构用户登录接口

Egg.js实战:重构用户登录接口

引言

在本篇博客中,我们将使用Egg.js框架来重构用户登录接口。我们将从添加路由开始,然后配置token,接着在service中处理密码,生成token,最后添加controller。我们还将使用Postman进行接口验证。

添加路由

首先,我们需要在router.js中添加路由。这里我们使用router.post方法,将/users/login路径映射到controller.user.login方法。

js 复制代码
module.exports = app => {
  const { router, controller } = app;
  router.post('/users/login', controller.user.login)
};

配置token

接着,我们需要在config.default.js中添加token配置。这里我们使用jsonwebtoken库,设置了secret和expiresIn。

js 复制代码
module.exports = appInfo => {
  // ...其它代码
  config.jwt = {
    secret: 'f2d1c153-39ec-4327-8c86-0d7308ad84f0',
    expiresIn: '1d'
  }

  return {
    ...config,
    ...userConfig,
  };
};

处理密码

service中,我们需要处理密码。因为在model中,我们设置了password为不可选,但是在登录时,我们需要通过email查找到password进行比对,所以我们需要在service中进行处理。

js 复制代码
const Service = require('egg').Service
const jwt = require('jsonwebtoken')

class UserService extends Service {
  // ...其它代码
  findEmail(email) {
    return this.User.findOne({
      email
    }).select('+password')
  }
}

module.exports = UserService

生成token

service/user.js中,我们需要封装token相关的方法。这里我们使用jsonwebtoken库来生成token。

添加controller

最后,我们需要在controller/user.js中添加controller。这里我们首先验证了用户输入的email和password,然后查找用户,如果用户不存在或者密码不正确,我们将抛出错误。如果验证通过,我们将生成token,并返回用户信息和token。

js 复制代码
const Controller = require('egg').Controller
class UserController extends Controller {
  async login() {
    const userBody = this.ctx.request.body
    this.ctx.validate({
      email: { type: 'string' },
      password: { type: 'string' }
    }, userBody)

    const user = await this.service.user.findEmail(userBody.email)
    if (!user) {
      this.ctx.throw(422, '用户未注册')
    }
    if (this.ctx.helper.md5(userBody.password) !== user.password) {
      this.ctx.throw(422, '密码不正确')
    }

    const token = this.service.user.createToken({ user })
    let userinfo = user._doc
    delete userinfo.password
    this.ctx.body = {
      ...userinfo,
      token
    }
  }
}

module.exports = UserController

Postman验证

最后,我们使用Postman进行接口验证,验证结果如下图所示:

总结

以上就是使用Egg.js重构用户登录接口的全部内容。通过这个过程,我们可以看到Egg.js在处理用户登录这样的常见需求时,其强大的功能和灵活性。

相关推荐
于小汐在咯6 小时前
深入浅出:增强现实(AR)技术全解析
后端·ar·restful
爱上妖精的尾巴6 小时前
5-27 WPS JS宏数组元素添加删除应用2
后端·restful·wps·js宏
努力的小郑6 小时前
与产品经理的“模糊”对决:Elasticsearch实现MySQL LIKE '%xxx%' 的奇幻之旅
后端·elasticsearch·搜索引擎
一 乐6 小时前
物业管理系统|小区物业管理|基于SprinBoot+vue的小区物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
稚辉君.MCA_P8_Java6 小时前
RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?
后端·架构·kafka·kubernetes·rocketmq
yolo_Yang7 小时前
【Spring Boot】Spring Boot解决循环依赖
java·spring boot·后端
wdfk_prog7 小时前
结合QBoot与HPatchLite实现高效差分升级(FOTA)
java·后端·struts
舒一笑7 小时前
用数据照亮成长之路:PandaCoder Git 统计工具窗口
git·后端·intellij idea
小妖同学学AI9 小时前
Rust 深度解析:基本类型的“精确”艺术
开发语言·后端·rust
我命由我123459 小时前
Guava - Guava 基本工具 Preconditions、Optional
java·服务器·开发语言·后端·java-ee·guava·后端框架