首页 > 数码 正文

登录认证处理 如何去除登录认证

时间:2023-09-27 作者:佚名

登录认证是所有后端服务器必备的功能,今天我们就来为我们的框架添加一下统一的登录认证逻辑。我们采用 JWT 的方式实现登录认证。

安装库

yarn add jsonwebtoken yarn add @types/jsonwebtoken

创建 JWT 处理模块增加 secret 配置

// .env AUTH_SECRET=secret

// src/config/index.ts secret: process.env.AUTH_SECRET || 'secret'

实现 Token 的生成和解析接口

// src/utils/auth.ts import jwt from 'jsonwebtoken'; import config from '../config'; /** * * @param payload 用户信息 * @returns */ export const generateToken = (payload: any): string => { return jwt.sign(payload, config.secret, { expiresIn: '1d' }); }; /** * * @param token * @returns */ export const verifyToken = (token: string): Record => { try { return { data: jwt.verify(token, config.secret), error: null }; } catch (error) { return { data: {}, error }; } };

创建认证中间件

ctx.state作为中间件消息传递的载体,具体来说就是我们给 ctx.state 对象中添加的属性和值,在其他 ctx 参数中均可以获取到,这样当我们的认证接口通过 Token 认证后,我们就可以把用户信息添加到 ctx.state 中,这样在其他的处理接口中就可以通过 ctx.state.user 拿到当前登录的用户信息。

// src/middlewares/authMiddleWare.ts import type { Context, Next } from 'koa'; import { verifyToken } from '../utils/auth'; /** * @description 登录认证中间件 * @param ctx * @param next */ const authMiddleWare = async (ctx: Context, next: Next) => { const { authorization } = ctx.request.header; if (!authorization) { ctx.throw(401, '未登录'); } const token = authorization.split(' ')[1]; const { data, error } = verifyToken(token); if (!error) { ctx.state.user = data; } else { switch (error.name) { case 'TokenExpiredError': ctx.throw(401, '登录已过期'); break; default: ctx.throw(400, 'Token错误'); break; } } await next(); }; export default authMiddleWare;

使用中间件修饰路由增加一个用户管理模块增加获取用户接口

// src/controller/user/view.ts import { Context } from 'koa'; import response from '../../utils/response'; class UserController { async getUser(ctx: Context) { const { user } = ctx.state; if (user) { response.success(ctx, ctx.state.user, '获取用户信息成功'); } else { response.error(ctx, '用户未登录'); } } } export default new UserController();

增加用户信息获取路由

// src/controller/user/router.ts import KoaRouter from 'koa-router'; import UserController from './view'; import authMiddleWare from '../../middlewares/authMiddleWare'; const router = new KoaRouter(); router.get('/getUser', authMiddleWare, UserController.getUser); export default router;

任何需要登录认证的路由都可以添加 authMiddleWare,这样就可以实现登录认证。还有一种方式是使用 koa-jwt 库,通过全局注册中间件为所有的路由都添加登录认证,将不需要认证的路由添加到白名单中即可。按照一般的思路来讲,我们的网站应该默认全部需要登录认证,特殊路由处理一下即可,但是我觉得 koa-jwt 那种方式不够优雅,不如在注册路由的时候,为指定路由添加 authMiddleWare。

本文信息为网友自行发布旨在分享与大家阅读学习,文中的观点和立场与本站无关,如对文中内容有异议请联系处理。

本文链接:https://www.paituo.cc/tech/1043091.html

  • 小编推荐

    mpg播放器能够在哪些设备上使用 MPG格式用什么播放器

    mpg播放器能够在哪些设备上使用,简介如下MPG播放器是人们在生活中常常使用的一种播放器,它是一种主流的数字媒体播放器,能够解码MPEG-1、MPEG-2、MPEG-4和AVC等格式的影片和音乐等多媒体...

    苹果ibooks怎么用

    本文讲述苹果ibooks怎么用以及苹果ibooks使用方法,简介如下 小编认为每个删掉苹果原生应用的朋友,都是土豪。苹果的NB不光体现在过硬的工业设计上,还有它基于ios和os打造的软件生态系统,配合icloud...

    怎么把几个视频合成一个视频固乔视频剪辑助手将多个视频合并为一个

    本文讲述怎么把几个视频合成一个视频固乔视频剪辑助手将多个视频合并为一个,简介如下 最近看到有很多人在问,如何将多个视频合并为一个视频,那么我今天在这里就告诉大家一个很简单的方法,只需几步即可完成操作,一起来看看吧。 步骤一: 我们先在浏览器...

    手机最简单的截屏方法(手机截屏你知道有几种)

    本文讲述手机最简单的截屏方法(手机截屏你知道有几种),简介如下 我们在玩手机过程中,总会遇到不错的段子想截图保存,或者视频中有趣的画面想第一时间录屏或截图,那怎样才能以迅雷不及掩耳之势快捷操作呢? 其实,截图和录屏在智能手...

    excel中格式刷如何使用(Excel格式刷的9个使用小技巧)

    本文讲述excel中格式刷如何使用(Excel格式刷的9个使用小技巧),简介如下 今天和小伙伴们来分享一下:格式刷的作用。 格式刷是office中的一种工具。用格式刷“刷”格式,可以快速将指定段落或文本的格式延用到其...

    视频号认证怎么弄(视频号认证详细步骤)

    本文讲述视频号认证怎么弄(视频号认证详细步骤),简介如下 视频号生态日益完善和正规,越来越多的视频号创作者收到微信视频号的官方提示:视频号认证需要提上日程。 那么,为什么要进行视频号认证,费那么大劲认证后有什么好处吗...

    超长待机手机排行榜(2022年大电池长续航手机推荐)

    本文讲述超长待机手机排行榜(2022年大电池长续航手机推荐),简介如下 如今的手机已经越做越重了,动不动就是190g、200g甚至更重,如果续航体验很差,出门还要带个至少半斤重的充电宝,两者加起来实在太沉重了,如果你正在为续航感到...

    看图软件哪个好用(faststone

    本文讲述看图软件哪个好用(faststoneimageviewer使用方法),简介如下 FastStoneImageViewer是一款快速、小巧、功能强大的综合图像浏览软件。它提供使用者方便的操作界面,让使用者可以通过它的操作界面来浏览图片,...