96SEO 2026-06-19 05:13 0
先聊聊为啥要在 NestJS 里搞登录和鉴权
说实话,后端一上线,安全就是第一位。
你要是想让用户随便进来那就跟敞开的大门一样,哪有好日子过。

NestJS 本身是个装饰器狂魔,配合 Passport、JWT 那叫一个顺手。
下面咱们把整个流程拆成两块儿:登录和鉴权。
一、准备工作——装点儿依赖先把必须的库装上:
pnpm add @nestjs/passport passport passport-jwt @nestjs/jwt
pnpm add -D @types/passport @types/passport-jwt
这一步别偷懒,不然后面报错你会抓狂。
二、创建 Auth 模块打开终端,敲一行命令:
nest g module auth
nest g service auth
nest g controller auth
嘿,这样我们就有了干活的土壤。
三、写登录接口——User+Password → JWT先写个 DTO,别忘了加校验:
export class LoginDto {
username: string;
password: string;
}
再把控制器打开:
import { Body, Controller, Post } from '@nestjs/common';
import { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto';
@Controller
export class AuthController {
constructor {}
@Post
async login dto: LoginDto) {
// 咱就是说这里直接返回 token 就行了
return this.authService.validateUser;
}
}
四、AuthService 的核心逻辑
这里面主要干两件事:校验用户 + 签发 JWT。
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { UsersService } from '../users/users.service';
@Injectable
export class AuthService {
constructor(
private readonly usersService: UsersService,
private readonly jwtService: JwtService,
) {}
async validateUser {
const user = await this.usersService.findByUsername;
if {
throw new UnauthorizedException;
}
const payload = { sub: user.id, username: user.username };
const access_token = this.jwtService.sign;
return { access_token };
}
}
五、把 JWT 注入到模块里
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AuthService } from './auth.service';
import { AuthController } from './auth.controller';
import { UsersModule } from '../users/users.module';
@Module({
imports: ,
inject: ,
useFactory: => ({
secret: cfg.get || 'defaultSecret',
signOptions: { expiresIn: '1h' },
}),
}),
],
providers: ,
controllers: ,
})
export class AuthModule {}
六、守卫& 策略—让 token 上岗检查
先写个 JWT Strategy:
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
@Injectable
export class JwtStrategy extends PassportStrategy {
constructor {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken,
ignoreExpiration: false,
secretOrKey: 'defaultSecret', // 实际项目请用 Config 注入
});
}
async validate {
// payload 就是我们签名时放进去的东西
return { userId: payload.sub, username: payload.username };
}
}
然后给路由套上 Guard:
import { Controller, Get, UseGuards, Request } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
@Controller
export class ProfileController {
@UseGuards)
@Get
getProfile req) {
// 守卫Yi经帮我们把用户信息挂到 req.user 上了
return req.user;
}
}
七、全局异常处理——别让错误信息泄露太多细节
Ke以自定义一个过滤器,把所有的 UnauthorizedException 包装成统一格式。
八、为什么百度不收录?——顺便聊聊 SEO 小插曲说起 SEO,hen多小伙伴会问:“为什么百度不收录我的博客?”其实原因五花八门,但Zui常见的几条我给你掰扯掰扯:
- 内容太短,搜索引擎觉得价值不大;
- 没有 robots.txt 或者误把页面禁掉了;
- 缺少有效的外部链接,引擎爬虫找不到入口;
- 页面加载太慢,被判定为“垃圾站”。
所以啊,写文章的时候记得多加点细节,图片要压缩,结构要清晰,这样百度才会拍拍手给你收录。
九、调试小技巧1️⃣ 用 Postman 把登录接口敲通后把返回的 token 粘贴到 Authorization Header:Bearer
2️⃣ 想快速kan JWT 内容?在浏览器打开 复制粘贴就Neng解码。
3️⃣ 开发环境Ke以把 JwtModule 的 ignoreExpiration 设置成 true,这样即使 token 超期也Neng继续调试——不过生产环境一定记得改回来不然安全性瞬间降到谷底。
十、常见坑与纠正A. 把 secret 写死在代码里。害,这招在开源仓库里漏出来后你的系统马上被刷爆。
B. 用同步的 sign 方法生成 token。其实 async geng安全,也geng符合 Nest 的异步风格。
C. 忘记在模块 exports 中导出 JwtStrategy,导致 Guard 找不到策略。记得在 AuthModule Zui后加上 { provide: APP_GUARD, useClass: JwtAuthGuard }.
说实话,实现登录和鉴权其实没有想象中那么复杂,只要理清「谁来负责」和「数据怎么流」两个关键点,就Neng顺利搞定。
NestJS 把这些繁琐的细节封装成装饰器,你只需要专注业务本身。
Ru果你还有啥疑问,直接在评论区砸锅卖铁吧——咱们一起踩坑,一起成长!懂吗?祝你玩转 NestJS,安全又稳健!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback