我正在尝试为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请求(在服务功能中也称为令牌