Node.js 实现google Oauth2(MERN)时出现CORS错误

Node.js 实现google Oauth2(MERN)时出现CORS错误,node.js,reactjs,mongodb,express,passport.js,Node.js,Reactjs,Mongodb,Express,Passport.js,我在mern web应用程序中使用passport.js实现了本地登录和google登录。本地身份验证在前端可以正常工作,但在使用Google策略时,我会出错 错误: 访问位于“”的XMLHttpRequesthttps://accounts.google.com/o/oauth2/v2/auth?.........“(已从中重定向”http://localhost:5000/auth/google“)起源”http://localhost:3000'已被CORS策略阻止:请求的资源上不存在'A

我在mern web应用程序中使用passport.js实现了本地登录和google登录。本地身份验证在前端可以正常工作,但在使用Google策略时,我会出错

错误
访问位于“”的XMLHttpRequesthttps://accounts.google.com/o/oauth2/v2/auth?.........“(已从中重定向”http://localhost:5000/auth/google“)起源”http://localhost:3000'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头

错误:网络错误
在createError(createError.js:16)
位于XMLHttpRequest.handleError(xhr.js:84)

控制台显示的问题
通过指定cookie的SameSite属性,指示是否要在跨站点上下文中设置cookie。
通过指定cookie的SameSite属性指示是否在跨站点请求中发送cookie

我用POSTMAN测试了谷歌的策略,效果很好,但从我的前端请求时,似乎出现了一些问题。

server.js

require("dotenv").config();
const express=require("express");
const cors=require("cors");
const mongoose=require("mongoose");
const session=require("express-session");
const passport=require("passport");
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const errorController=require("./controllers/errorController")


const app=express();
const port = process.env.PORT || 5000;

app.use(
  cors({
    origin: "http://localhost:3000", // <-- location of the react app were connecting to
    credentials: true,
  })
);
app.use(express.static("public"));
app.use(express.urlencoded({extended: true}));
app.use(express.json());



app.use(session({
    secret:process.env.SECRET,
    resave:false,
    saveUninitialized:false,
}));

app.use(passport.initialize());
app.use(passport.session());

const User=require("./models/user.model");
passport.use(User.createStrategy());

passport.serializeUser(function(user, done) {
    done(null, user.id);
  });
  
  passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });
  });


passport.use(new GoogleStrategy({
    clientID: process.env.CLIENT_ID,
    clientSecret: process.env.CLIENT_SECRET,
    callbackURL: "http://localhost:5000/auth/google/keeper"
  },
  function(accessToken, refreshToken, profile, cb) {
      console.log(profile);
    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }
));

mongoose.connect(process.env.MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify:false, useCreateIndex:true});


const connection = mongoose.connection;
connection.once('open', () => {
  console.log("MongoDB database connection established successfully");
});


const loginRouter=require("./routes/login");
const registerRouter=require("./routes/register");
const logoutRouter=require("./routes/logout");
const authRouter=require("./routes/auth");



app.use("/login", loginRouter);
app.use("/register", registerRouter);
app.use("/logout", logoutRouter);
app.use("/auth/google", authRouter);

app.use(errorController);

app.listen(port, function(){
    console.log("server started on port 5000");
});
来自前端的Axios请求

function googleLogin(event){
      Axios({
        method: "GET",
        withCredentials: true,
        url: "http://localhost:5000/auth/google",
      })
      .then(function(res){
        console.log(res);
      })
      .catch(function(err){
        console.log(err);
      })
      event.preventDefault();
    }
触发请求的按钮

<button className="btn btn-danger" onClick={googleLogin}>Sign in with Google</button>
使用谷歌登录

将访问控制允许原始值添加到*或FE url。那么它就可以工作了。@AmaranadhMeda我已经在cors中间件中添加了origin值作为前端URL。请查看server.js文件。我无法将其标记为*,因为我在axios请求中已将withCredentials标记为true。3天以来我一直在讨论这个问题:'(在/login route configuration之前添加cors配置。
<button className="btn btn-danger" onClick={googleLogin}>Sign in with Google</button>