首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在NestJS中使用基本身份验证?

在NestJS中使用基本身份验证,可以通过创建一个自定义中间件来实现。以下是一个简单的示例,演示如何在NestJS中使用基本身份验证:

  1. 首先,确保已经安装了NestJS CLI和相应的软件包。如果尚未安装,请参考NestJS官方文档进行安装。
  2. 使用NestJS CLI创建一个新项目:
代码语言:javascript
复制
nest new nestjs-basic-auth-example
  1. 进入项目目录:
代码语言:javascript
复制
cd nestjs-basic-auth-example
  1. 安装@nestjs/platform-express模块,因为我们将使用Express作为底层HTTP平台:
代码语言:javascript
复制
npm install --save @nestjs/platform-express
  1. 创建一个名为basic-auth.middleware.ts的新文件,用于实现基本身份验证中间件:
代码语言:javascript
复制
// basic-auth.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class BasicAuthMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    const authHeader = req.headers.authorization;
    if (!authHeader) {
      return res.status(401).send('Authentication header missing');
    }

    const [authType, credentials] = authHeader.split(' ');
    if (authType.toLowerCase() !== 'basic') {
      return res.status(400).send('Invalid authentication type');
    }

    const [username, password] = Buffer.from(credentials, 'base64').toString().split(':');
    if (username !== 'admin' || password !== 'password') {
      return res.status(401).send('Invalid username or password');
    }

    next();
  }
}

在这个中间件中,我们检查请求头中的Authorization字段。如果没有提供,或者认证类型不是Basic,则返回相应的错误状态码。然后,我们解码Base64编码的凭据,并检查用户名和密码是否有效。在这个示例中,我们只接受用户名为admin且密码为password的有效凭据。

  1. app.module.ts中导入BasicAuthMiddleware
代码语言:javascript
复制
// app.module.ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { BasicAuthMiddleware } from './basic-auth.middleware';

@Module({
  imports: [],
  controllers: [],
  providers: [],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(BasicAuthMiddleware)
      .forRoutes('*');
  }
}

在这里,我们实现了NestModule接口,并在configure方法中使用MiddlewareConsumer配置中间件。我们将BasicAuthMiddleware应用于所有路由。

  1. 创建一个名为app.controller.ts的新文件,用于测试基本身份验证:
代码语言:javascript
复制
// app.controller.ts
import { Controller, Get } from '@nestjs/common';

@Controller()
export class AppController {
  @Get()
  getHello(): string {
    return 'Hello, you are authenticated!';
  }
}
  1. 更新app.module.ts以包含新创建的控制器:
代码语言:javascript
复制
// app.module.ts
import { Module } from '@nestjs/common';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppController } from './app.controller';
import { BasicAuthMiddleware } from './basic-auth.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [],
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(BasicAuthMiddleware)
      .forRoutes('*');
  }
}
  1. 更新main.ts以使用ExpressAdapter
代码语言:javascript
复制
// main.ts
import { NestFactory } from '@nestjs/core';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, new ExpressAdapter());
  await app.listen(3000);
}
bootstrap();

现在,当你尝试访问http://localhost:3000时,浏览器会提示你输入用户名和密码。只有在提供了有效的凭据(在这个示例中是admin用户名和password密码)后,你才能看到“Hello, you are authenticated!”的消息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 14.如何为Cloudera Manager集成OpenLDAP认证

    Fayson在前面一系列文章中介绍了OpenLDAP的安装及与CDH集群中各个组件的集成,包括《1.如何在RedHat7上安装OpenLDA并配置客户端》、《2.如何在RedHat7中实现OpenLDAP集成SSH登录并使用sssd同步用户》、《3.如何RedHat7上实现OpenLDAP的主主同步》、《4.如何为Hive集成RedHat7的OpenLDAP认证》、《5.如何为Impala集成Redhat7的OpenLDAP认证》、《6.如何为Hue集成RedHat7的OpenLDAP认证》、《7.如何在RedHat7的OpenLDAP中实现将一个用户添加到多个组》、《8.如何使用RedHat7的OpenLDAP和Sentry权限集成》、《9.如何为Navigator集成RedHat7的OpenLDAP认证》、《10.如何在OpenLDAP启用MemberOf》、《11.如何为CDSW集成RedHat7的OpenLDAP认证》、《12.OpenLDAP管理工具Phpldapadmin的安装及使用》和《13.一键添加OpenLDAP用户及Kerberos账号》。本篇文章Fayson主要介绍如何为Cloudera Manager集成OpenLDAP认证。

    02
    领券