मेरे पास एक Vue.js SPA और एक Node.js API है जिसे Express.js के साथ बनाया गया है। मैं सत्र का प्रबंधन करने के लिए एक्सप्रेस-सत्र (^ 1.11.3) का उपयोग कर रहा हूं और सीक्वेलाइज के माध्यम से पोस्टग्रेज डीबी पर सत्र को जारी रखने के लिए एक्सप्रेस-सीक्वेलाइज-सत्र (0.4.0) का उपयोग कर रहा हूं क्योंकि मुझे पासपोर्ट-एज़ूर का उपयोग करने में सक्षम होने के लिए एक सत्र की आवश्यकता है -ओआईडीसी रणनीति के साथ विज्ञापन।

मुझे कुछ समय बाद Microsoft खातों के साथ लॉग इन करने में कुछ समस्याएँ आ रही थीं और मैं इस निष्कर्ष पर पहुँचा कि ऐसा इसलिए है क्योंकि ब्राउज़र से सत्र कुकी (connect.sid) को कभी भी साफ़ नहीं किया जाता है।

मैंने कुछ चीजों को गलत तरीके से कॉन्फ़िगर किया था और कुछ बदलाव किए थे लेकिन सभी परिवर्तनों के साथ भी यह अभी भी काम नहीं कर रहा है।

मेरे एक्सप्रेस ऐप पर सत्र निम्न तरीके से कॉन्फ़िगर किया गया है:

import session from 'express-session';
import expressSequelizeSession from 'express-sequelize-session';

const Store = expressSequelizeSession(session.Store);

app.use(session({
  cookie: {
    path: '/',
    httpOnly: true,
    secure: env !== 'development', // On environments that have SSL enable this should be set to true.
    maxAge: null,
    sameSite: false, // Needs to be false otherwise Microsoft auth doesn't work.
  },
  secret: config.secrets.session,
  saveUninitialized: false,
  resave: false,
  unset: 'destroy',
  store: new Store(sqldb.sequelize),
}));

FE पर मैं Axios के साथ Vue.js का उपयोग कर रहा हूं और क्रेडेंशियल के साथ सत्य पर सेट कर रहा हूं ताकि कुकी HTTP अनुरोध पर पास हो जाए।

// Base configuration.
import Axios from 'axios';

Axios.defaults.baseURL = config.apiURL;
Axios.defaults.headers.common.Accept = 'application/json';
Vue.$http = Axios;

// When making request.
Vue.$http[action](url, payload, { withCredentials: true }).then(() => // Handle request);

आप छवि से देख सकते हैं कि कुकी लॉगआउट अनुरोध पर भेजी जा रही है।

enter image description here

लॉग आउट करते समय मैं इस समापन बिंदु को मार रहा हूं और सत्र को नष्ट कर रहा हूं जैसा कि दस्तावेज़ीकरण में बताया गया है< /ए>.

router.post('/logout', (req, res) => {
  try {
    req.session.destroy(() => {
      return responses.responseWithResultAsync(res); // Helper method that logs and returns status code 200.
    });

    return responses.handleErrorAsync(res); // Helper method that logs and returns status code 500.
  } catch (error) {
    return responses.handleErrorAsync(res, error); // Helper method that logs and returns status code 500.
  }
});

दिलचस्प बात यह है कि डीबी पर सत्र हटा दिया गया है, इसलिए मुझे पता है कि कुकी सही सत्र आईडी के साथ अनुरोध पर ठीक से भेजी जा रही है लेकिन यह किसी कारण से ब्राउज़र पर इसे हटा नहीं रही है। लॉग आउट करने के बाद भी मेरे पास यह है:

enter image description here

क्या किसी को पता है कि मैं क्या गलत कर रहा हूँ? मुझे यह अजीब लगता है कि डीबी पर सत्र सफलतापूर्वक हटाया जा रहा है लेकिन अनुरोध पर नहीं।

0
João Paiva 25 सितंबर 2020, 15:56

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि @RolandStarke ने एक्सप्रेस-सत्र पुस्तकालय का उल्लेख किया है में कुकी को हटाने के लिए अंतर्निहित कार्यक्षमता नहीं है ब्राउज़र, इसलिए मैंने इसे निम्नलिखित तरीके से मैन्युअल रूप से किया:

router.post('/logout', (req, res) => {
  try {
    if (req.session && req.session.cookie) {
      res.cookie('connect.sid', null, {
        expires: new Date('Thu, 01 Jan 1970 00:00:00 UTC'),
        httpOnly: true,
      });

      req.session.destroy((error) => {
        if (error) {
          return responses.handleErrorAsync(res, error);
        }

        return responses.responseWithResultAsync(res);
      });
    }

    return responses.responseWithResultAsync(res);
  } catch (error) {
    return responses.handleErrorAsync(res, error);
  }
});
1
João Paiva 28 सितंबर 2020, 18:31