Shopify имеет аналогичный способ проверки запросов, этот код работал для меня, возможно, вы можете изменить его.
Сначала вам нужно установить crypto:
npm install --save crypto
Затем:
import { Injectable, CanActivate, ExecutionContext, HttpStatus } from '@nestjs/common';
const crypto = require('crypto');
@Injectable()
export class ShopifyAuthGuard implements CanActivate {
async canActivate(context: ExecutionContext): Promise<boolean> {
const request = context.switchToHttp().getRequest();
const secretKey = <MY_KEY>;
const hmac = request.headers["x-shopify-hmac-sha256"];
const hash = crypto
.createHmac('sha256', secretKey)
.update(request.body)
.digest('base64');
if (hmac === hash) {
return true;
} else {
throw new ForbiddenException("Not allowed");
}
}
}
И, наконец, на вашем контроллере:
@Post()
@UseGuards(ShopifyAuthGuard)
async createNewOrder(@Body() orderDto: OrderDto) {}
Надеюсь, это поможет!