Problem Redirecting after google signin in express react app using passport-google-oauth20

强颜欢笑 提交于 2021-01-29 07:19:32

问题


I have express backend and create-react-app2 as frontend , I am using setupProxy also. Now I have configured the app for google sign in however I am not getting proper redirect to index page after signin. Here is google oauth setup in console.developer.google.com

I am using passport google oauth20 for authentication: Here my passport file:

const  GoogleStrategy   = require('passport-google-oauth20').Strategy;
const keys = require('./../keys/secret');
const  {User} = require('./../models/user');



module.exports = function(passport) {


    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: keys.googleClientID,
    clientSecret: keys.googleClientSecret,
    callbackURL: '/auth/google/callback'
  },
  async (accessToken, refreshToken, profile, done) => {
    const existingUser = await User.findOne({ 'google.id' :  profile.id });

    if(existingUser) {

        done(null, existingUser);

    }else {
       const user =  await new User({ 
           'google.id' :  profile.id,
           isSocialAccountPresent: true })
       .save();
       done(null, user);
    }


  }
));

}

Here are my routes:

router.get('/google',
  passport.authenticate('google', { scope: ['profile', 'email'] }));


  router.get('/google/callback', 
  passport.authenticate('google'),
   (req, res) => {
    // Successful authentication, redirect home.
    res.redirect('/');
  });

Here is my setupProxy file:

const proxy = require("http-proxy-middleware");
module.exports = function(app) {

  app.use(proxy("/auth/*", { target: "http://localhost:5000/" }));
  app.use(proxy("/api/*", { target: "http://localhost:5000/" }));


};

Im gettting redirected to following URL :

http://localhost:3000/auth/google/callback?code=4/0gBVQE1R0m7FWFlg_QtXE2n9lvwVHoG_lNNH_zCueOeQAJZc6-8FygiH9u_9BfnQQt8yl2ECmD1gW3Gq9by25D4&scope=email+profile+https://www.googleapis.com/auth/userinfo.profile+https://www.googleapis.com/auth/userinfo.email

instead of http://localhost:5000/auth/google/callback


回答1:


In your setupProxy.js file try this...

app.use(proxy("/auth/**", { target: "http://localhost:5000/" }));
app.use(proxy("/api/*", { target: "http://localhost:5000/" }));

You'll see I added an additional asterisk. This tells node to go one level deeper for "/callback".




回答2:


Using res.redirect('/') you've to use the full path (http://localhost:5000....).




回答3:


None of the answers here has worked for me. I believe that you would already have the file setupProxy.js in the src/ folder of your React client. Then, in that file, if you're setting changeOrigin: true for the object passed in the createProxyMiddleware function, you should remove that and that should fix the problem. At least, that worked for me.




回答4:


This did the trick for me on setupProxy.js

const { createProxyMiddleware } = require("http-proxy-middleware");

module.exports = (app) => {
  app.use(
    ["/api", "/auth/google/callback"],
    createProxyMiddleware({
      target: "http://localhost:5000",
    })
  );
};


来源:https://stackoverflow.com/questions/54181142/problem-redirecting-after-google-signin-in-express-react-app-using-passport-goog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!