Routfin
Routfin

Reputation: 457

This expression is not constructable error passport google oauth nodejs

I'm trying to integrate with my NodeJS api developed in typescript with google Oauth2 through passport, but following the documentation that is in javascript, I have an underlined error in GoogleStrategy

This expression is not constructable.
  Type 'typeof import("/home/mypc/networking_api/node_modules/@types/passport-google-oauth20/index")' has no construct signatures.
import GoogleStrategy from 'passport-google-oauth20';
import passport from 'passport';

passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET ,
    callbackURL: "/auth/google/callback"
  },
  function({accessToken, refreshToken, profile, cb}: any) {

}
));

Also, because it is typescript, in the accessToken, refreshToken and etc variables, I would need to put a type and so I put "any". Would it be correct?

Upvotes: 1

Views: 543

Answers (1)

Ralle Mc Black
Ralle Mc Black

Reputation: 1203

Try it like this:

import {Strategy as GoogleStrategy } from 'passport-google-oauth20';


passport.use(new GoogleStrategy({
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET ,
    callbackURL: "/auth/google/callback"
  },
  function({accessToken, refreshToken, profile, cb}: any) {

}
));

To not use any define a interface.

Update:

To create enviroments variables do like so:

  1. create a .env file in your root project folder
  2. npm i dotenv
  3. create enviroments variables in the .env file
clientId=1234
clientSecret=mysupersecret

Add following to your code:

import * as dotenv from 'dotenv' 
dotenv.config() 

now you can access the env variables with:

process.env.clientId 

Upvotes: 4

Related Questions