我需要在没有中间件的情况下在NestJS中进行身份验证

时间:2019-08-29 07:41:23

标签: authentication http-headers nestjs

我有url,此url需要使用用户名和密码进行身份验证。在PHP上,我使用curl_setopt(CURLOPT_USERPWD,$ username。':'。$ password)做到了,我找不到在NestJS的同一链接上设置密码和用户名的任何解决方案。

import { Injectable, Scope, HttpService } from '@nestjs/common';
import { ImporterService } from '../importer.service';
import { map } from 'rxjs/operators';


@Injectable({ scope: Scope.REQUEST })
export class Supplier extends ImporterService {
supplierName = 'supplierName';
fileDownload: boolean = false;
username = 'username;
password = 'password';


async parse() {
await this.checkSupplierExist(this.supplierName);
return this.httpService
  .get(
    'https://www.link.com/restful/export/api/products.xml?acceptedlocales=en_US&addtags=true',
  )
  .pipe( map(response => console.log(response)));
 }
}

此响应发送401,导致它需要身份验证。我不知道如何设置用户名或密码。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

从我这里我有一个配置服务,可以处理http调用,如下所示:

@Injectable()
export class ConfigService {
    private readonly envConfig: { [key: string]: string };
    private servers: Object = {};

    constructor(private httpService: HttpService) {
        this.envConfig = {
            PORT: process.env.PORT,
            MONGODB_URI: process.env.MONGODB_URI,
            MONGODB_SESSION_URI: process.env.MONGODB_SESSION_URI,
            SESSION_SECRET: process.env.SESSION_SECRET
        };

        const externals = JSON.parse(process.env.EXTERNALS);
        for (const lang in externals) {
            this.servers[lang] = externals[lang];
        }
    }

    get(key: string): string {
        return this.envConfig[key];
    }

    getServer(lang: string, method: string, url: string, headers: Object, params?: Object, data?: Object) {
        const config = { baseURL: this.servers[lang], url, headers, method, data, params };
        return this.httpService.request(config).toPromise();
    }
}

正如在getServer方法中看到的那样,还可以添加标头。 希望这就是您要寻找的