#javascript #node.js #express #passport.js #openid-connect
#язык JavaScript #node.js #экспресс #passport.js #openid-подключение
Вопрос:
Я понятия не имею, как завершить сеанс, поэтому, когда пользователь делает запрос на мою конечную точку /выхода из системы, сеанс очищается, и им необходимо снова войти в систему с помощью единого входа.
Вот мой код… до сих пор, как только я войду в систему изначально, что бы я ни делал, я остаюсь в системе и мне не нужно вводить учетные данные через моего поставщика аутентификации.
let OpenIDConnectStrategy = require('passport-ci-oidc').IDaaSOIDCStrategy const passport = require("passport") app.use(session({ resave: 'false', saveUninitialized: 'false', secret: 'keyboard cat', cookie: false })); app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function (obj, done) { done(null, obj); }); var Strategy = new OpenIDConnectStrategy({ discoveryURL: discovery_url, clientID: client_id, scope: 'openid', response_type: 'code', clientSecret: client_secret, callbackURL: callback_url, skipUserProfile: true, addCACert: true, CACertPathList: [ '/src/server/DigiCertGlobalRootCA.crt', '/src/server/DigiCertSHA2SecureServerCA.crt' ] }, function (iss, sub, profile, accessToken, refreshToken, params, done) { process.nextTick(function () { profile.accessToken = accessToken; profile.refreshToken = refreshToken; done(null, profile); }) }); passport.use(Strategy); app.get('/login', passport.authenticate('openidconnect', {})); function ensureAuthenticated(req, res, next) { if (!req.isAuthenticated()) { req.session.originalUrl = req.originalUrl; res.redirect('/login'); } else { return next(); } } app.get('/auth/sso/redirect', function (req, res, next) { var redirect_url = req.session.originalUrl; passport.authenticate('openidconnect', { successRedirect: redirect_url, failureRedirect: '/failure' })(req, res, next); }); app.get('/failure', function (req, res) { res.redirect('/login') }); app.get('/logout', ((req, res) =gt; { req.logout() req.session.destroy((err) =gt; { res.clearCookie('connect.sid') res.send('logged out') }) })) app.get('/', ensureAuthenticated, function (req, res, next) { next() }); // serve React application app.use(express.static(path.join(__dirname, '../../build')))