关于 Token 认证机制,这里不做更多解释。不清楚的可以看我的这篇文章:Web开发中常见的认证机制
GitHub 地址:koa-jwt-sample
所需库
- bcrypt - 用于加密密码
- koa-jwt - jwt 中间件
- jsonwebtoken - 用于生成token下发给浏览器,在 koa2 以后的版本不再提供 jsonwebtoken 的方法,所以需要另行安装。
实现思路
整个方案实现的流程和思路很清晰,大致分为下面几步:
- 自定义 401 拦截中间件,用于拦截 token 不存在或者失效的情况
- 配置 koa-jwt
- 注册实现
- 登录实现
运行项目
该项目需要你已经装好 mongodb,并启动。关于 mongodb 的配置见 config/index.js
。
npm run start
该项目提供了三个 api
- /api/register
- /api/login
- /api/users
其中 /api/register
和 /api/login
为 public api,无需token就能访问。/users
则为 private api,需要传入正确的 token 才能访问。
自定义 401 handler
使用了 koa-jwt
中间件后,如果没有token,或者token失效,该中间件会给出对应的错误信息。如果没有自定义中间件的话,会直接将 koa-jwt
暴露的错误信息直接返回给用户。
// server/middlewares/errorHandle.js
export default errorHandle = (ctx, next) => {
return next().catch((err) => {
if (err.status ===