title: Node.js "passport-google-oauth2" delivers "failed to fetch user profile" error in Express application
body: <p>While developing the last example of a <a href="/questions/tagged/node.js" class="post-tag" title="show questions tagged &#39;node.js&#39;" rel="tag">node.js</a>'s introductory <a href="https://pragprog.com/book/jwnode/node-js-the-right-way">book</a> (an <a href="/questions/tagged/express.js" class="post-tag" title="show questions tagged &#39;express.js&#39;" rel="tag">express.js</a> application using authentication strategy by Google OpenID), after replacing the <code>passport-google</code> package <em>(which got obsolete on April 20th, 2015)</em> with <code>passport-google-oauth2</code> package (authentication strategy by Google OAuth 2.0) and having followed the indications at <a href="https://www.npmjs.com/package/passport-google-oauth2">its documentation's page</a> and an <a href="https://github.com/mstade/passport-google-oauth2/blob/master/example/app.js">example here</a>; I got the below error after selecting my Google+ account, which was thrown by the <code>oath2.js</code> module, concretely calling <code>this._oauth2.get("https://www.googleapis.com/plus/v1/people/me",...)</code> within <code>userProfile(accessToken, done)</code> method. The related source code and module dependencies are below. </p>
  
  <p>What could be the root of the problem?</p>
  
  <p>The concrete error is:</p>
  
  <pre><code>InternalOAuthError: failed to fetch user profile
      at &lt;...&gt;\web-app\b4\node_modules\passport-google-oauth2\lib\oauth2.js:92:28
      at passBackControl (&lt;...&gt;\web-app\b4\node_modules\passport-google-oauth2\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9)
      at IncomingMessage.&lt;anonymous&gt; (&lt;...&gt;\web-app\b4\node_modules\passport-google-oauth2\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7)
      at IncomingMessage.emit (events.js:129:20)
      at _stream_readable.js:908:16
      at process._tickCallback (node.js:355:11)
  </code></pre>
  
  <p>The related application's code is:</p>
  
  
  
  <pre class="lang-js prettyprint-override"><code>  passport = require('passport'),
    //...
    GoogleStrategy = require('passport-google-oauth2').Strategy; // #passport-google-oauth2
    //...
    /***** #passport-google-oauth2 vv *****/
    passport.use(new GoogleStrategy({
      clientID: "a_specific_value",
      clientSecret: "another_specific_value",
      callbackURL: "http://127.0.0.1:3000/auth/google/callback",
      passReqToCallback:true
    },
    function(request, accessToken, refreshToken, profile, done) {
        profile.identifier=profile.id;
        return done(null, profile);
    }
    ));
    /***** #passport-google-oauth2 ^^ *****/
    //...
    /*****  #passport-google-oauth2 vv    *****/
    app.get('/auth/google',
    passport.authenticate('google', { successRedirect: '/',scope:
      [ 'https://www.googleapis.com/auth/userinfo.email']})
    );
    app.get( '/auth/google/callback',
      passport.authenticate( 'google', {
          successRedirect: '/',
          failureRedirect: '/'
    }));
    /*****  #passport-google-oauth2 ^^    *****/    
  </code></pre>
  
  <p>The application has the following dependencies:</p>
  
  <pre>
  b4@0.0.1
  ├─┬ connect-redis@1.4.7
  │ ├─┬ debug@2.1.3
  │ │ └── ms@0.7.0
  │ └── redis@0.10.3
  ├─┬ cookie-parser@1.3.4
  │ ├── cookie@0.1.2
  │ └── cookie-signature@1.0.6
  ├─┬ express@3.3.8
  │ ├── buffer-crc32@0.2.1
  │ ├─┬ commander@1.2.0
  │ │ └── keypress@0.1.0
  │ ├─┬ connect@2.8.8
  │ │ ├── bytes@0.2.0
  │ │ ├── formidable@1.0.14
  │ │ ├── pause@0.0.1
  │ │ ├── qs@0.6.5
  │ │ └── uid2@0.0.2
  │ ├── cookie@0.1.0
  │ ├── cookie-signature@1.0.1
  │ ├─┬ debug@2.1.3
  │ │ └── ms@0.7.0
  │ ├── fresh@0.2.0
  │ ├── methods@0.0.1
  │ ├── mkdirp@0.3.5
  │ ├── range-parser@0.0.4
  │ └─┬ send@0.1.4
  │   └── mime@1.2.11
  ├─┬ express-session@1.11.1
  │ ├── cookie@0.1.2
  │ ├── cookie-signature@1.0.6
  │ ├── crc@3.2.1
  │ ├─┬ debug@2.1.3
  │ │ └── ms@0.7.0
  │ ├── depd@1.0.1
  │ ├── on-headers@1.0.0
  │ ├── parseurl@1.3.0
  │ ├─┬ uid-safe@1.1.0
  │ │ ├── base64-url@1.2.1
  │ │ └── native-or-bluebird@1.1.2
  │ └── utils-merge@1.0.0
  ├─┬ morgan@1.5.2
  │ ├── basic-auth@1.0.0
  │ ├─┬ debug@2.1.3
  │ │ └── ms@0.7.0
  │ ├── depd@1.0.1
  │ └─┬ on-finished@2.2.0
  │   └── ee-first@1.1.0
  ├─┬ npmlog@0.0.4
  │ └── ansi@0.1.2
  ├─┬ passport@0.2.1
  │ ├── passport-strategy@1.0.0
  │ └── pause@0.0.1
  ├─┬ passport-google-oauth2@0.1.6
  │ └─┬ passport-oauth2@1.1.2
  │   ├── oauth@0.9.12
  │   ├── passport-strategy@1.0.0
  │   └── uid2@0.0.3
  ├── q@0.9.7
  ├── redis@0.8.6
  └─┬ request@2.27.0
    ├── aws-sign@0.3.0
    ├── cookie-jar@0.3.0
    ├── forever-agent@0.5.2
    ├─┬ form-data@0.1.4
    │ ├── async@0.9.0
    │ └─┬ combined-stream@0.0.7
    │   └── delayed-stream@0.0.5
    ├─┬ hawk@1.0.0
    │ ├── boom@0.4.2
    │ ├── cryptiles@0.2.2
    │ ├── hoek@0.9.1
    │ └── sntp@0.2.4
    ├─┬ http-signature@0.10.1
    │ ├── asn1@0.1.11
    │ ├── assert-plus@0.1.5
    │ └── ctype@0.5.3
    ├── json-stringify-safe@5.0.0
    ├── mime@1.2.11
    ├── node-uuid@1.4.3
    ├── oauth-sign@0.3.0
    ├── qs@0.6.6
    └── tunnel-agent@0.3.0
  
  </pre>