CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

03 July, 2023

Client not receiving session data from server using Node, Passport JS, and cookie-session

 Programing Coderfunda     July 03, 2023     No comments   

so i've been using development servers this entire time, and everything's worked fine. Now, as I've deployed my client and backend, i'm running into an issue where my client cannot grab the sessional data from the cookie. i've checked both the backend and client cookies, and it seems like the session and session.sig are identical, so i don't know what's the deal... here's the relevant code: my backend: server.js: dotenv.config({ path: "./.env" }); const cookieKey = process.env.COOKIE_KEY; const express = require("express"); const cookieSession = require("cookie-session"); const connectDB = require("./config/db"); const passport = require("passport"); const PORT = process.env.PORT || 4500; const cors = require("cors"); connectDB(); const app = express(); //middleware app.use(express.json()); app.use( cors({ origin: true, // replace with your frontend domain credentials: true, }) ); app.use( cookieSession({ maxAge: 24 * 60 * 60 * 1000, // 1 day keys: [cookieKey], cookie: { secure: true, sameSite: "none", }, }) ); app.use(passport.initialize()); app.use(passport.session()); const authentication = require("./routes/Authentication.js"); app.use("/api/v1/auth", authentication); const tabs = require("./routes/Tabs.js"); // Adjust the path as necessary app.use("/api/v1/tabs", tabs); const preferences = require("./routes/Preferences.js"); app.use("/api/v1/preferences", preferences); const google = require("./routes/Google.js"); // Adjust the path as necessary app.use("/api/v1/google", google); app.listen(PORT, () => console.log("Server is connected")); authentication.js: dotenv.config({ path: "./.env" }); const sucessRedirectURL = process.env.SUCCESS_REDIRECT_URL; const express = require("express"); const passport = require("passport"); require("../services/Passport"); const router = express.Router(); router.get( "/google", passport.authenticate("google", { scope: ["profile", "email", "https://www.googleapis.com/auth/calendar"], accessType: "offline", approvalPrompt: "force", }) ); router.get( "/google/callback", passport.authenticate("google", { successRedirect: sucessRedirectURL, }) ); router.get("/me", (req, res) => { if (req.user) { res.send(req.user); } else { res.status(401).json({ message: "Not authenticated" }); } }); router.get("/logout", (req, res) => { console.log("logging out"); req.logout(); res.redirect("/"); }); module.exports = router; and my own service file, passport.js: dotenv.config({ path: "./.env" }); const googleClientID = process.env.GOOGLE_CLIENT_ID; const googleClientSecret = process.env.GOOGLE_CLIENT_SECRET; const backendAppURL = process.env.BACKEND_APP_URL; const passport = require("passport"); const GoogleStrategy = require("passport-google-oauth20"); const User = require("../models/User"); //when a user logs in, we get a 'user object' which is serialized to our session by storing a user's ID, //which is called automatically after logging passport.serializeUser((user, done) => { done(null, user.id); }); //now, when we want to take the data stored in our session, we use the ID to recreate the full user object on //each request, which is automatically done on each request passport.deserializeUser((id, done) => { User.findById(id).then((user) => { done(null, user); }); }); //this code happens first to find/create a user object passport.use( new GoogleStrategy( { clientID: googleClientID, clientSecret: googleClientSecret, callbackURL: backendAppURL + "/api/v1/auth/google/callback", //FULL CALLBACK URL IN PRODUCTION VS RELATIVE PATH IN DEVELOPMENT }, async (accessToken, refreshToken, profile, done) => { try { const existingUser = await User.findOneAndUpdate( { googleId: profile.id }, { accessToken, refreshToken, name: profile.displayName, avatarUrl: profile.picture, isVerified: profile.emails[0].verified, } ); if (existingUser) { console.log("Existing user found:", existingUser); return done(null, existingUser); } const user = await new User({ accessToken, refreshToken, name: profile.displayName, email: profile.emails[0].value, googleId: profile.id, avatarUrl: profile.picture, isVerified: profile.emails[0].verified, }).save(); console.log("New user saved:", user); done(null, user); } catch (error) { console.error("Error during authentication: ", error); done(error); } } ) ); here's the backend cookie:
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • How to monitor process status during process lifetime
    I need to track the process status ps axf during executable lifetime. Let's say I have executable main.exec and want to store into a fi...
  • Use Flags For Countries & Languages in Laravel Blade Views
      Blade Flags   is a package to efficiently use   TwEmoji Countries & Languages Flags   in your Laravel Blade views. You can use it easi...
  • How to Run a Python File on a Specific Virtual Desktop Only?
    I want to run a Python script on a specific virtual desktop without affecting other desktops. Currently, when I execute my Python file us...
  • Blade Component to Serve Images and Download Files
      Smart   makes it possible to serve images and download files from any location, including Laravel disks within a Laravel application. It e...
  • Encrypt Database Values in Laravel with DB Encrypter
      Laravel DB Encrypter is a package by   Daniel Częstki   that automatically encrypts and decrypts values stored in database fields. It uses...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda