'Invalid "id" when trying to set up Google OAuth2 with Passport
I'm trying to set up my user authentication routes with passport
using the GoogleStrategy
and having some issues configuring it. I grabbed some code snippets to at least get it running.
passport.js
const dotenv = require("dotenv");
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require(dotenv).config();
passport.use(
new GoogleStrategy(
{
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "http://localhost:8000/users/auth/google",
scope: ["profile", "email"],
},
function (request, accessToken, refreshToken, profile, done) {
return done(null, profile);
}
)
);
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
This is on my main server.js
file:
const express = require("express");
const app = express();
const passport = require("passport");
require("./config/passport");
const session = require("express-session");
require("dotenv").config();
const PORT = process.env.PORT || 8000;
app.use(session({ secret: "cats", resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());
const tickerRoutes = require("./routes/tickers");
app.get("/", (req, res) => {
res.send("greetings!");
});
app.get(
"/users/signin",
passport.authenticate("google", {
successRedirect: "http://localhost:8000/users/success",
failureRedirect: "/login/failed",
scope: ["profile", "email"],
})
);
app.use("/tickers", tickerRoutes);
app.use("/users", userRoutes);
app.listen(PORT, () => {
console.log(`App is listening on port: ${PORT}`);
});
However, I get the following error when running my server:
node:internal/validators:119
throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
^
TypeError [ERR_INVALID_ARG_TYPE]: The "id" argument must be of type string. Received an instance of Object
at new NodeError (node:internal/errors:371:5)
at validateString (node:internal/validators:119:11)
at Module.require (node:internal/modules/cjs/loader:998:3)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/Users/carlosgrijalva/Documents/coinview/backend/config/passport.js:4:1)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19) {
code: 'ERR_INVALID_ARG_TYPE'
}
I have double checked my env
variables and they seem to be valid, so I'm not sure what the problem is.
Solution 1:[1]
Your error is sourced from here:
const dotenv = require("dotenv"); // returns object
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require(dotenv).config();//you have used an object here instead of a string
first, you are requiring dotenv
module this operation returns the object and then you use this object in the require()
function. This function expects a string but you add an object.
require(id)#
- id
<string>
module name or path- Returns:
<any>
exported module content
You can fix it as follows:
const passport = require("passport");
const GoogleStrategy = require("passport-google-oauth20").Strategy;
require("dotenv").config()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |