nestjs10.x使用jwt生成token

news2024/10/6 22:25:10

1 安装依赖:

pnpm install --save @nestjs/jwt
 
pnpm install passport passport-jwt @nestjs/jwt
 
pnpm install @types/passport-jwt --save-dev

2 可以使用命令新建auth鉴权文件夹

nest g mo auth  // auth.module.ts
nest g s auth   // auth.service.ts
nest g co auth  //auth.controller.ts

3 在auth.module.ts配置jwt

import { Module } from '@nestjs/common';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { UserModule } from '../user/user.module';
import { PassportModule } from '@nestjs/passport';
import { JwtModule } from '@nestjs/jwt';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { JwtStrategy } from './auth.strategy';


@Module({
  imports: [

    PassportModule,
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => {
        return {
          secret: configService.get('jwt').secret,//jwt密钥
          signOptions: { expiresIn: '60s' }
        }
      },
      inject: [ConfigService]
    }),

  ],
  exports: [
    JwtModule
  ],
  controllers: [AuthController],
  providers: [
    AuthService,
    JwtStrategy
  ],
})
export class AuthModule {}

4 其中密钥我通过外部文件引入,也可以使用.env引入

configService.get('jwt').secret,

5. 然后在auth.service.ts中, 生成token,返回给前端

import { HttpException, Injectable } from '@nestjs/common';
import { UserService } from '../user/user.service';
import { JwtService } from '@nestjs/jwt';

@Injectable()
export class AuthService {

    constructor(
       private userService: UserService,
       private jwt: JwtService,
    ) {}
    
    //登录
    async manageLogin(username: string, password: string) {
        
        const user: ManageUserEntity = await this.userService.findUserName(username);
      
        // 生成token
        let token = await this.jwt.signAsync({
            username: user.username,
            id: user.id
        })

        return token
    }
    
}

 6. 验证token, 要在auth中新建auth.strategy.ts

import { Injectable, UnauthorizedException } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
import { Strategy, ExtractJwt } from "passport-jwt";
import { ConfigService } from '@nestjs/config';

/**
 * JWT策略
 * 
 */

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
    //对前端传递来的token进行解析
    constructor(
        private configService: ConfigService,
        ) {
        super({
          jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),//校验逻辑token 已封装
          ignoreExpiration: false,
          secretOrKey: configService.get('jwt').secret,
        });
    }

    /**
     * 验证token
     * @param payload
     */
    async validate(payload: any) {
        
       

        return {id: payload.id, username: payload.username}
    }
}

其中在validate中,会返回已经解析好的用户id和名称。

7. 然后通过路由验证下token

import {UseGuards, Req } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';

@Post('/update')
    @UseGuards(AuthGuard('jwt'))
    async saveManage(@Body() dto: CreateManageDto, @Req() req) {
        console.log(req.user)
        
        return '更新成功';
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1499654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录 | mac报错:not prividing “FindClang.cmake“

报错: CMake Error at CMakeLists.txt:72 (find_package): By not providing "FindClang.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Clang", but CMake did not find one.…

香橙派AIpro外设接口样例大全(附源码)

Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,其搭载了昇腾 AI 处理器,可提供 8TOPS INT8 的计算能力,内存提供了 8GB 和 16GB两种版本。可以实现图像、视频等多种数据分析与推理计算,可广泛用于教育、机器…

视频水印怎么轻松去除?这三款神器让您直呼过瘾!

在现代社会,视频内容日益丰富多样,但有时我们更希望获得视频中的文字文稿,以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具,它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…

【开源】SpringBoot框架开发快乐贩卖馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 搞笑视频模块2.3 视频收藏模块2.4 视频评分模块2.5 视频交易模块2.6 视频好友模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 搞笑视频表3.2.2 视频收藏表3.2.3 视频评分表3.2.4 视频交易表 四、系…

广播

1.什么是广播 2.标准广播 BroadStandardActivity.java package com.tiger.chapter09;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View;…

Vue 使用@别名

1. 安装 types/node types/node 包允许您在TypeScript项目中使用Node.js的核心模块和API,并提供了对它们的类型检查和智能提示的支持。 npm install types/node --save-dev 比如安装之后,就可以导入nodejs的 path模块,在下面代码 import pat…

数据要素“摸家底”:是什么?为什么?怎么做?

继经济数据“摸家底”之后,全国数据资源也迎来一次“大摸底”。2月19日,国家数据局等四部门发布《关于开展全国数据资源调查的通知》,提出“摸清数据资源底数”,为相关政策制定、试点示范等工作提供数据支持。如此大规模数据资源调…

centos7保姆级安装jdk8教程

文章目录 1、下载jdk安装包2、在centos7 创建文件夹3、解压jdk文件4、配置环境变量a、打开环境变量文件b、将配置信息复制进去。c、重新加载环境变量 5、测试是否成功 1、下载jdk安装包 jdk下载地址:https://www.oracle.com/java/technologies/downloads/ Oracle…

深入了解Python的eval函数:基础用法与潜在危险【第118篇—eval函数】

深入了解Python的eval函数:基础用法与潜在危险 在Python中,eval函数是一个强大而灵活的工具,它允许将字符串作为代码来执行。然而,虽然eval在某些情况下非常方便,但它也潜藏着一些潜在的危险,如果不小心使…

MySQL 学习笔记(基础篇 Day3)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. MySQL 学习笔记(基础篇 Day1) 2. MySQL 学习笔记&#xff08…

【论文阅读笔记】Activating More Pixels in Image Super-Resolution Transformer

论文地址:https://arxiv.org/abs/2205.04437 代码位置:https://github.com/XPixelGroup/HAT 论文小结 本文方法是基于Transformer的方法,探索了Transformer在低级视觉任务(如SR)中的应用潜力。本文提升有效利用像素范…

机器学习的魔法(一)从零开始理解吴恩达的精炼笔记

一、机器学习是什么? 1、机器学习的概念 机器学习是一种人工智能领域的技术和方法,旨在使计算机系统能够从经验数据中自动学习和改进,而无需显式地进行编程。它涉及开发算法和模型,使计算机能够自动分析和理解数据,并…

HIngress 的定位和基本运行原理

HIngress介绍 Higress是基于阿里内部的Envoy Gateway实践沉淀、以开源Istio Envoy为核心构建的下一代云原生网关,实现了流量网关 微服务网关 安全网关三合一的高集成能力,深度集成Dubbo、Nacos、Sentinel等微服务技术栈,能够帮助用户极大的…

IMU在下肢姿态估计中的应用

随着人口老龄化,如何改善老人运动健康成为了我们这个时代的一大挑战。近期,一项研究探索了将工业机器人调整以辅助运动治疗的可能性。实验重点关注运用惯性测量单元(IMU)来分析下肢动作,从而评估治疗效果实施效果。 实…

HttpRequest请求模块设计与实现(http模块二)

目录 类功能 类定义 类实现 编译测试 类功能 类定义 // HttpRequest请求模块 class HttpRequest { public:std::string _method; // 请求方法std::string _path; // 资源路径std::string _version…

论文阅读之Multimodal Chain-of-Thought Reasoning in Language Models

文章目录 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果总结 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reasoning in Language Models》主要内容进行介绍。 摘要 大型语言模型(LLM…

hexo butterfly博客搭建美化集合+问题记录

文章目录 一、美化1. cs 和js引入2. 图标使用 三、问题总结1. vscode终端输入hexo命令报错 一、美化 1. cs 和js引入 hexo博客添加自定义css和js文件 如果想魔改和美化,添加自定义文件是不可避免的。下面来详细说一下css和js文件的创建和引入,其他文件同…

AI预测福彩3D第5弹【2024年3月8日预测--新算法重新开始计算日期】

今天是三八妇女节,首先祝各位女性朋友节日快乐! 写代码真是容不得一点马虎,前面连续搞了4期的预测,其中昨晚个位开出了一个异常的号码5,我用AI预测的结果是5百分百不会出,5的出现让我非常的震惊&#xff0c…

mysql数据库入门到精通-Windows版本mysql安装(1)

文章目录 一、数据库介绍1.1、数据库概念1.2、为什么要使用数据库1.3、关系型数据库与非关系型数据库1.4、数据库术语1.5、mysql下载及地址 二、安装mysql数据库三、mysql的管理工具3.1、mysql command line client使用 四、SQL结构化查询语言4.1、SQL概述4.2、SQL发展4.3、SQL…

Transformer中Self-Attention的详细解读

Transformer最早是在论文《Attention is All You Need》中提出的,目前已广泛应用于NLP领域,如语言翻译、文本分类、问答系统等。由于在产品规划中需要使用这样的模型结构,因此花了一些时间对其进行了一些学习理解。 除了阅读论文及配套的代码…