Ошибка аутентификации при использовании аутентификации nestjs - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь реализовать аутентификацию, используя документацию nestjs.https://docs.nestjs.com/techniques/authentication

И я внедряю аутентификацию JWT, и при попытке доступа к API, который проходит аутентификацию, я получаю ошибку проверки, даже до проверки.Кто-нибудь сталкивался с подобной проблемой.

@Get()
  @UseGuards(AuthGuard('jwt'))
  async findAll(): Promise<UserDto[]> {
    return this.userService.findAll();
  }

Этот маршрут дает мне неавторизованную ошибку.Я действительно новичок в Typescript и nestjs

Мой код доступен здесь в моем репозитории GitHub.Пожалуйста, дайте мне знать, что пошло не так.https://github.com/shamnadps/TypeScript_Project/blob/master/src/user/user.controller.ts#L23

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Ваша - небольшая, но критическая - ошибка содержится в значении secretOrKey, которое вы используете для подписи своего токена.У вас есть разные значения между src/auth/jwt.strategy.ts и src/auth/auth.service.ts.

In src/auth/auth.service.ts:
Вместо этого:

async createToken() {
    const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
    return jwt.sign(user, 'secretkey'); // <== /!\ focus on this one /!\
}

Используйте это:

async createToken() {
        const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
        return jwt.sign(user, 'secretKey'); // <== /!\ focus on this one /!\
}

Поскольку вы используете secretKey для подписи своего токена, а не secretkey (обратите внимание на случай с верблюдом):

constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: 'secretKey', // <== /!\ focus on this line /!\
    });
}

Чтобы избежать таких проблем, я бы рекомендовал использовать process.env.<your-variable> вместо прямой настройки конфигурации вручную в строках.


Это выглядело бычто-то вроде этого в src/auth/jwt.strategy.ts:

constructor(private readonly authService: AuthService) {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      secretOrKey: process.env.SECRET
    });
}

и в src/auth/auth.service.ts, например:

async createToken() {
    const user: UserDto = { name: 'shamnad', phoneNumber: '12435' };
    return jwt.sign(user, process.env.SECRET); // <== /!\ focus on this one /!\
}

Наконец, чтобы установить переменную среды, выполните следующую команду на основе вашегоОС:
- Mac OS: export SECRET=<your-secret-key>
- Windows: set SECRET=<your-secret-key>


Надеюсь, это поможет;)

0 голосов
/ 24 мая 2018

как вы получили доступ к маршруту?

вы должны сначала создать токен.

не знаю, дает ли вам подсказку

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...