在NestJS上将OAuth2与Discord API结合使用时发生问题

时间:2019-07-03 11:07:44

标签: node.js nestjs

我正在尝试为Discord创建自定义API,但现在我正在尝试设置OAuth2。

要发出必要的HTTP请求,我使用的是NestJS中包含的HttpModule,它是axios,因此在我的服务中,我定义了一个函数来检索代码(以前由Discord发送)并最终获得访问令牌,这是外观:

@Injectable()
export class AuthService {
  constructor(private http: HttpService) {}

  async validateToken(token: string) {
    const data = {
      client_id: [some thing],
      client_secret: [some thing],
      grant_type: 'authorization_code',
      code: token,
      redirect_url: encodeURI('https://49fe5ab2.ngrok.io/auth'),
      scope: 'identify',
    };

    return await this.http
      .post('https://discordapp.com/api/oauth2/token', null, { params: data, headers: {"Content-Type": "application/x-www-form-urlencoded"}})
      .toPromise()
      .then(resp => Logger.log(resp))
      .catch(err => Logger.error(err));
  }
}

在控制器中,我为OAuth2设置的路由只是一个函数

@Controller('auth')
export class AuthController {
  constructor(private readonly AuthService: AuthService) {}

  @Get()
  responseRetrieve(@Req() request) {
      return this.AuthService.validateToken(request.query.code);
  }
}

发生的事情是,我仅获得401状态代码,这意味着我的所有访问均未经授权。我已经尝试过将数据作为请求主体传递,最后将其作为当前参数传递。

OBS:我知道我应该为客户端ID和client_secret使用环境变量,但现在我正在尝试使这项工作有效。

我没有弄错我在做错什么,因为唯一不起作用的是我收到代码后立即发出的axios POST请求(在服务功能中也称为令牌

0 个答案:

没有答案