Google-cloud-node: Cannot authenticate using `private_key` and `client_email`

Created on 21 Mar 2016  ·  7Comments  ·  Source: googleapis/google-cloud-node

I am trying to connect my NodeJS application to Pub/Sub. Since the production environment is in an AWS instance, I cannot use the _default credentials approach_. So, my approach is to pass a credentials object with the private key and the client email:

var gcloud_config = {
    projectId: process.env.GCLOUD_PROJECT_ID,
    credentials: {
        client_email : process.env.GCLOUD_CLIENT_EMAIL,
        private_key : process.env.GCLOUD_PRIVATE_KEY
    }
}

According to the docs. This variable is passed as an argument in a class constructor:

constructor(gcloud_config) {
        this.topicName = 'cerebro.TrackeableEvent';

        this.pubsub = gcloud.pubsub(gcloud_config);
        this.topic = this.pubsub.topic(this.topicName);
        this.topic.get({
            autoCreate: true
        }, function(err, data) {
            console.log('PubSubTrackeableEventAPI');
            console.log('err: ' + err);
            console.log('data: ' + data);
        });
    }

When I run locally, everything is OK. There is no err and I can publish to this.topicName. When I run on my staging environment, at AWS, I receive the error Error: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.. I don't know what I am doing wrong. I tried several combinations of the GCLOUD_PRIVATE_KEY. With and without the markers "-----BEGIN PRIVATE KEY-----n" and "n-----END PRIVATE KEY-----n".

Is this a bug or am I doing something wrong that I don't know?

Most helpful comment

Changed

private_key : process.env.GCLOUD_PRIVATE_KEY

by

private_key : process.env.GCLOUD_PRIVATE_KEY.replace(/\\n/g, '\n')

All 7 comments

I guess I found the error. Tomorrow I'll check at the office.

Changed

private_key : process.env.GCLOUD_PRIVATE_KEY

by

private_key : process.env.GCLOUD_PRIVATE_KEY.replace(/\\n/g, '\n')

@eduardo-tenorio-guiabolso THANK YOU!

@eduardo-tenorio-guiabolso I had the same challenge with hosting on Heroku, I needed to store the private key in environment variable, and your fix saved my day (doing the newline .replace on the key)

Thank you so much :)

@eduardo-tenorio-guiabolso I have been banging my head against a wall trying to figure out how to handle the newline characters, thank you so much for posting your solution, it worked perfectly!

(╯°□°)╯︵ ┻━┻

...but yeah, this definitely does the trick. thanks a million!

SAVED MY LIFE! THANK YOU!

Was this page helpful?
0 / 5 - 0 ratings