Как пройти аутентификацию вошедшего в систему пользователя в Nest Js с помощью Swagger - PullRequest
0 голосов
/ 23 апреля 2020

Я только начал использовать гнездо js для проекта. Я успешно вошел в систему пользователей и вернул токен. Теперь проблема заключается в использовании токена для авторизации пользователей. Пытаясь получить всех пользователей возвращает «несанкционированный доступ»

Я также думаю, что неправильно поставил токен или около того. В пользовательском интерфейсе авторизации swagger я ввел Bearer someTokenGoesHere в поле ввода

Изображение ниже enter image description here

Это мой код main.ts Конфигурация Swagger в main. ts

  const options = new DocumentBuilder().addBearerAuth()
    .setTitle('My app')
    .setDescription('My app API description')
    .setVersion('1.0')
    .addTag('Tags')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('', app, document);

Пользовательский контроллер

import { Controller, Post, Body, Get, Param, UseGuards } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './create-user.dto';
import { LoginUserDto } from './login-user.dto';
import { AuthService } from 'src/auth/auth.service';
import { AuthGuard } from '@nestjs/passport';
import { AdminGuard } from 'src/guards/admin.guard';
import { ApiBearerAuth, ApiBasicAuth } from '@nestjs/swagger';

@Controller('user')
export class UserController {
    constructor(private userService: UserService,
        private authService: AuthService) { }

    @Post('login')
    async login(@Body() loginDTO: LoginUserDto) {
        const user = await this.userService.login(loginDTO);

        const newob = {
            id: user._id
        }

        const payload = {
            userId: user._id,
            email: user.Email,
        }

        const token = await this.authService.signPayLoad(payload);
        return { newob, token };
    }

    @Post('register')
    async register(@Body() createDTO: CreateUserDto) {
        const user = await this.userService.register(createDTO);
        const newob = {
            id: user._id
        }
        const payload = {
            firstname: user.FirstName,
            lastname: user.LastName
        };
        const token = await this.authService.signPayLoad(payload);
        return newob;
    }

    @Get('all')
    @ApiBearerAuth()
    @UseGuards(AuthGuard('jwt'))
    async getAllUsers() {
        return await this.userService.getAllUsers();

    }

    @Post('confirm/:token')
    async confirmEmail(@Param() token: string) {
        const user = await this.userService.ConfirmEmail(token);
        return user;
    }

}

Может кто-нибудь, пожалуйста, помогите мне Спасибо

1 Ответ

0 голосов
/ 24 апреля 2020

Мне удалось это исправить, я ценю ваши предложения. Я извлекал электронную почту, которой не было в полезной нагрузке. поэтому я решил войти в систему и обнаружил, что это было нулевым. Затем я выхожу из полезной нагрузки и обнаруживаю, что передаю идентификатор пользователя в полезную нагрузку. Поэтому я изменяю на id.

Результат -

async findByPayLoad(payload: any) {
        const { userId } = payload;
        return await this.userModel.findById(userId)

    }
...