使用async/await时,Request-Promise抛出“未定义认证机制”的错误

11

我刚尝试使用request-promise进行异步/等待操作,但遇到了这个错误:

RequestError: Error: no auth mechanism defined
      at new RequestError (node_modules/request-promise-core/lib/errors.js:14:15)
      at Request.plumbing.callback (node_modules/request-promise-core/lib/plumbing.js:87:29)
      at Request.RP$callback [as _callback] (node_modules/request-promise-core/lib/plumbing.js:46:31)
      at self.callback (node_modules/request/request.js:188:22)
      at Auth.onRequest (node_modules/request/lib/auth.js:133:18)
      at Request.auth (node_modules/request/request.js:1360:14)
      at Context.<anonymous> (test/routes.js:37:41)
  From previous event:
      at Request.plumbing.init (node_modules/request-promise-core/lib/plumbing.js:36:28)
      at Request.RP$initInterceptor [as init] (node_modules/request-promise-core/configure/request2.js:41:27)
      at new Request (node_modules/request/request.js:130:8)
      at request (node_modules/request/index.js:54:10)
      at Context.<anonymous> (test/routes.js:37:24)

这是我最近建立的一个API端点,用于在MongoDB中创建新用户。它使用Passport策略提供的基本身份验证,并且我已经使用Postman测试过它可行。但我不确定为什么会出现这个错误。

我的请求代码(使用Mocha):

it("creates a new user", async () => {
  const options = {
    method: "POST",
    uri: `http://localhost:${process.env.PORT}/api/users`,
    headers: {
      "User-Agent": "Request-Promise",
      "Content-Type": "application/json"
    },
    body: {
      email: "test@domain.com",
      password: "password",
      firstName: "John",
      lastName: "Smith"
    },
    json: true
  };
  const resp = await request(options).auth(APP_ID, SIGNATURE, false);
  expect(resp).to.be.an("object");
});

编辑:我应该还要补充一下,我正在使用node 8.2.1和npm 5.3.0。

3个回答

8

通过更改以下内容,我的问题得到了解决:

auth: { Bearer: token }

to:

auth: { bearer: token }

请注意'bearer'的大小写区别。

2

通常是由于提供的凭据不合适引起的。引发错误的代码可以在此处找到。您是否验证了测试中的APP_IDSIGNATURE不是undefined


是的,我确定它们不是。我已经有一段时间没有在这个项目上工作了,但我相信APP_IDSIGNATURE被定义为文件顶部的模块常量。我也测试过使用字面量来确保。 - spicypumpkin
这很有帮助。如果请求不使用授权,则不能传递auth:{}auth:{username:undefined,password:undefined}。必须省略auth属性。 - Kip

1

这个解决方案对我很有效。我需要将令牌放在头部中:

var rp = require('request-promise');

var uri = 'uri_for_my_post_request';
var token = 'access_token';
var body =  {
    title: 'My Title',
    content : 'My content'
}; 

var sendPost = async(my_uri,my_token,my_body)=>{
    var options = {
    method: 'POST',
    headers:{
        Authorization: ' Bearer ' + my_token           
   },
    uri: my_uri,
    body: my_body,
    json: true
};

const response = await rp(options);
console.log(response);
}

sendPost(uri,token,body);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接