Request-Promise throws "no auth mechanism defined" using async/await
Asked Answered
O

3

11

I was just trying out async/await with request-promise and ran into this error:

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)

It is an API endpoint that I built recently that's supposed to create a new user in MongoDB. It uses Basic Auth provided by Passport strategy, and I've tested with Postman that it works. I'm not exactly sure why this error is being thrown.

My request code (using 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: "[email protected]",
      password: "password",
      firstName: "John",
      lastName: "Smith"
    },
    json: true
  };
  const resp = await request(options).auth(APP_ID, SIGNATURE, false);
  expect(resp).to.be.an("object");
});

Edit: I should probably also add that I'm using node 8.2.1 and npm 5.3.0.

Oppenheimer answered 7/8, 2017 at 16:8 Comment(0)
D
8

Solved for me by changing from:

auth: { Bearer: token }

to:

auth: { bearer: token }

Note the case difference on 'bearer'.

Duhon answered 30/9, 2018 at 1:33 Comment(0)
N
2

This is usually caused by not providing suitable credentials. The code raising the error can be found here. Have you verified that APP_ID and SIGNATURE are not undefined in your test?

Nath answered 15/9, 2017 at 12:48 Comment(2)
Yeah, I'm certain they weren't. It's been a while since I worked on the project but I believe APP_ID and SIGNATURE were defined as module-wide constants at the top of the file. I tested using literals as well just to make sure.Oppenheimer
This was helpful. You can't pass auth: {} or auth: { username: undefined, password: undefined}. you have to leave out the auth property if the request does not use authorizationSternmost
T
1

This solution works for me. I have needed to put the token inside the headers :

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);
Thin answered 2/2, 2020 at 11:55 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.