在Egg.js中使用中间件实现用户登录验证
在本篇博客中,我们将探讨如何在Egg.js框架中通过中间件实现token验证,以确保用户的合法身份。这一技术在需要安全访问的API接口中尤为重要。
1. 在 service/user.js
中添加验证token函数
首先,我们在 service/user.js
文件中创建一个函数来验证token。这个函数使用了 jsonwebtoken
库来解析和验证token。
js
const Service = require('egg').Service
const jwt = require('jsonwebtoken')
class UserService extends Service {
verifyToken(token) {
return jwt.verify(token, this.app.config.jwt.secret)
}
}
2. 新建 middleware/auth.js
接下来,我们在 middleware
目录下新建一个 auth.js
文件。这个中间件将负责提取请求头中的token,并调用之前创建的验证函数进行验证。
js
module.exports = (options = { required: true }) => {
return async (ctx, next) => {
let token = ctx.headers.authorization
token = token ? token.split('Bearer ')[1] : null
if (token) {
try {
const data = ctx.service.user.verifyToken(token)
ctx.user = data.user
} catch (error) {
ctx.throw(401, 'token验证失败')
}
} else if (!options.required) {
await next()
} else {
ctx.throw(401, 'token未传入')
}
await next()
}
}
3. 新建路由进行验证
最后,我们在路由文件中配置路由,使其在访问某些特定接口时,先通过token验证中间件。
js
module.exports = app => {
const { router, controller } = app;
// 添加前缀
router.prefix('/api/v1')
// 用户频道
router.post('/users/info', app.middleware.auth(), controller.user.userInfo)
};
总结
通过以上步骤,我们成功地在Egg.js项目中实现了一个基于中间件的token验证机制。此实现方法确保了只有携带有效token的请求才能访问特定的API接口,从而提高了系统的安全性。
总之,使用中间件进行token验证是保护API接口的一种有效方式。这种方法不仅使代码更加简洁明了,还能确保系统的安全性和稳定性。