Чтобы создать POST
конечную точку /authenticate
на бэкэнде, которая обрабатывает обмен кода авторизации для токена доступа , нам нужно сначала определить dto что ожидает конечная точка.
От клиента мы ожидаем объект, имеющий поля authorization_code
и origin
.
разрешительного request.dto.ts
export class AuthorizationRequestDto {
readonly authorization_code: string;
readonly origin: string;
}
Теперь мы можем создать контроллер , который будет обрабатывать POST
запросов, отправленных на /authenticate
:
import { Body, Controller, HttpService, Post } from '@nestjs/common';
import { AxiosResponse } from '@nestjs/common/http/interfaces/axios.interfaces';
import { Observable } from 'rxjs/internal/Observable';
import { map } from 'rxjs/operators';
import { AuthorizationRequestDto } from './authorization-request.dto';
@Controller('authenticate')
export class AuthController {
constructor(private readonly httpService: HttpService) {}
@Post()
authenticate(@Body() authorizationRequestDto: AuthorizationRequestDto): Observable<AxiosResponse<any>> {
return this.httpService.post('https://YOUR_AUTH0_DOMAIN/oauth/token', {
grant_type: 'authorization_code',
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
code: authorizationRequestDto.authorization_code,
redirect_uri: authorizationRequestDto.origin,
}).pipe(
map(response => response.data),
);
}
}
Естественно, в приведенном выше коде нам нужно заменить YOUR_AUTH0_DOMAIN
, YOUR_CLIENT_ID
и YOUR_CLIENT_SECRET
.