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

  • Crawl and Index Your Website with Laravel Site Search
      Laravel Site Search   is a package by Spatie to create a full-text search index by crawling your site. You can think of it as a private Go...
  • JqueryUI - Show
    JqueryUI - Show, JqueryUI,  This chapter will discuss the show() method, which is one of the methods used to manage jQueryUI visual effe...
  • SpinLock VB.Net Example From MSDN Possibly Produces Incorrect Behaviour
    The code below is part of an example from MSDN. It is the example on how to use SpinLock but to my eye there is a race condition in it. Why ...
  • WordPress Table
    WordPress Table WordPress table is an easy way to show the data in the table format. In the past, we had used the HTML code or table plugin ...
  • Python exec() Function
    Python exec() Function The python  exec()  function is used for the dynamic execution of Python program which can either be a string or obje...

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