oauth2 - stopped to work after adding ssl certificate

Viewed 45

My site: https://parkovka.in.ua/

On the page: https://parkovka.in.ua/login there is 'Sign in with Google' button.

Error: GET https://parkovka.in.ua/auth/login/success 403 (Forbidden)

Image: https://imgur.com/a/ZbtxJGX

My app is based on React.js and Express.js. Server is Nginx.

passport.js

const GoogleStrategy = require('passport-google-oauth20').Strategy;
const passport = require('passport');

const GOOGLE_CLIENT_ID = "secret code";
const GOOGLE_CLIENT_SECRET = "secret code";

passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "/auth/google/callback",
    scope: ["profile", "email"],
    proxy: true
  },
  function(accessToken, refreshToken, profile, callback) {
    callback(null, profile);
  }
));

passport.serializeUser((user, callback)=> {
  callback(null, user);
});

passport.deserializeUser((user, callback)=> {
  callback(null, user);
});

auth.js

const router = require("express").Router();
const passport = require('passport');
require('dotenv').config();
let CLIENT_URL;


if (process.env.NODE_ENV === "production") {
    CLIENT_URL = 'https://parkovka.in.ua';
} else {
    CLIENT_URL = 'http://localhost:3000'; 
}


router.get("/login/success", (req, res)=>{
    

    if(req.user) {
        res.status(200).json({
            error: false,
            success: true,
            message: "success",
            user: req.user, 
            // cookies: req.cookies
        });
    } else {
        res.status(403).json({
            error: true,
            message: "Not autorized",
        });
    }

    
});

router.get("/login/faild", (req, res)=>{
    res.status(401).json({
        success: false,
        message: "failure"
    });
});

router.get("/logout", (req, res)=>{
    req.logout();
    res.redirect(CLIENT_URL);
});

router.get("/google/callback", passport.authenticate("google", {
    successRedirect: CLIENT_URL,
    failureRedirect: "login/faild"
}));

router.get("/google", passport.authenticate("google", ["profile", "email"]));


module.exports = router;

Login.js

import React from 'react';
import GoogleButton from 'react-google-button'
import styles from  './Login.module.scss';



const Login = () => {


    const google = () => {
        window.open(`${process.env.REACT_APP_DOMAIN}/auth/google`, '_self');
    }

    return (
        <div className={styles.login}>
            <div className={styles.login__alternative}>
                <GoogleButton
                onClick={google}
                />
            </div>
        </div>
    );
}

export default Login;

ENV: REACT_APP_DOMAIN=https://parkovka.in.ua

server {

        root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name parkovka.in.ua;


        location / {
               proxy_pass http://localhost:5000;
               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection 'upgrade';
               proxy_set_header Host $host;
               proxy_cache_bypass $http_upgrade;

        }

listen [::]:443 ssl ipv6only=on; # managed by Certbot
   listen 443 ssl; # managed by Certbot
   ssl_certificate /etc/letsencrypt/live/parkovka.in.ua/fullchain.pem; # managed by Certbot
   ssl_certificate_key /etc/letsencrypt/live/parkovka.in.ua/privkey.pem; # managed by Certbot
   include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
   ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    server_name www.parkovka.in.ua;
    return 301 $scheme://parkovka.in.ua$request_uri;


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/parkovka.in.ua/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/parkovka.in.ua/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = parkovka.in.ua) {
       return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80 default_server;
        listen [::]:80 default_server;

        server_name parkovka.in.ua;
    return 404; # managed by Certbot


}

server {
   if ($host = www.parkovka.in.ua) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name www.parkovka.in.ua;
    listen 80;
    return 404; # managed by Certbot

}



index.js

const express =  require('express');
const app = express();
const dotenv = require('dotenv');
const fs = require('fs');

// підключення монгуса
const mongoose = require("mongoose");
const authRoute = require("./routes/auth");
const postRoute = require("./routes/posts");
const categoryRoute = require("./routes/categories");
const multer = require("multer");
const path = require('path/posix');
const PORT = process.env.PORT || 5000;
const cookieSession = require('cookie-session');
const passport = require('passport');
const cors = require('cors');
const passportSetup = require('./passport');
let CLIENT_URL;



if (process.env.NODE_ENV === "production") {
    CLIENT_URL = 'https://parkovka.in.ua';
} else {
    CLIENT_URL = 'http://localhost:3000'; 
}



dotenv.config();
app.use(express.json());
app.use("/images", express.static(path.join(__dirname, "/images")));
app.use(cookieSession(
    {
        name: "session",
        keys: ["lama"],
        maxAge: 24*60*60*100
    }

));
app.use(passport.initialize());
app.use(passport.session());
app.use(cors({
    origin: CLIENT_URL,
    methods: "GET,POST,PUT,DELETE",
    credentials: true,
}));

app.enable('trust proxy');


// підключення монго дб
mongoose.connect(process.env.MONGO_URL)
.then(
    console.log('connected mongo')
)
.catch( err => {
    console.log(err)
});




const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, path.join(__dirname, 'images'));
    },
    filename: function (req, file, cb) {
        cb(
        null,
        file.originalname
        );
    },
    });

const multi_upload = multer({storage,
fileFilter: (req, file, cb) => {
    if (
        file.mimetype == 'image/png' ||
        file.mimetype == 'image/jpeg' ||
        file.mimetype == 'image/jpg'
    ) {
        cb(null, true);
    } else {
        cb(null, false);
        const err = new Error('Only .jpg .jpeg .png images are supported!');
        err.name = 'ExtensionError';
        return cb(err);
    }
},
}).array('uploadImages', 10);

app.post('/api/upload', (req, res) => {
    multi_upload(req, res, function (err) {
    console.log(req.files);
    //multer error
    if (err instanceof multer.MulterError) {
        console.log(err);
        res.status(500).send({error: { msg: `multer uploading error: ${err.message}` },}).end();
        return;
    } else if (err) {
    //unknown error
    if (err.name == 'ExtensionError') {
        res.status(413).send({ error: { msg: `${err.message}` } }).end();
    } else {
        res.status(500).send({ error: { msg: `unknown uploading error: ${err.message}` } }).end();
    }
    return;
    }
    res.status(200).send('file uploaded');
});
});



app.use('/auth', authRoute);
app.use('/api/posts', postRoute);
app.use('/api/marks', categoryRoute);



app.use('/api/deleteImg/:arrayImages', (req, res, next) => {

    const imagesArr = req.params.arrayImages.split(",");

    for (const element of imagesArr) {
        let path = `./images/${element}`;

        fs.unlink(path, (err) => {
            if (err) {
                console.error(err)
                return
            }
        });
    }


    
})




app.use(express.static(path.join(__dirname, "/client/build")));

app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, '/client/build', 'index.html'));
});



app.listen(PORT, () => {
    console.log('Backend is runningggg.');
});
0 Answers
Related