26-login-route #28

Merged
Ajdj100 merged 4 commits from 26-login-route into main 2025-11-22 17:08:39 -06:00
5 changed files with 15 additions and 14 deletions

View File

@@ -16,4 +16,4 @@ AUTH_REVOCATION_URI=
# SERVER SETTINGS # SERVER SETTINGS
SERVER_PORT=3000 SERVER_PORT=3000
CLIENT_URL= # This is whatever URL the client web app is served on

View File

@@ -61,7 +61,7 @@ passport.use(new OpenIDConnectStrategy({
router.get('/login', (req, res, next) => { router.get('/login', (req, res, next) => {
// Store redirect target in session if provided // Store redirect target in session if provided
req.session.redirectTo = req.query.redirect || '/'; req.session.redirectTo = req.query.redirect;
next(); next();
}, passport.authenticate('openidconnect')); }, passport.authenticate('openidconnect'));
@@ -69,7 +69,7 @@ router.get('/login', (req, res, next) => {
// router.get('/callback', (req, res, next) => { // router.get('/callback', (req, res, next) => {
// passport.authenticate('openidconnect', { // passport.authenticate('openidconnect', {
// successRedirect: req.session.redirectTo, // successRedirect: req.session.redirectTo,
// failureRedirect: process.env.BASE_URL // failureRedirect: process.env.CLIENT_URL
// }) // })
// }); // });
@@ -77,27 +77,27 @@ router.get('/callback', (req, res, next) => {
const redirectURI = req.session.redirectTo; const redirectURI = req.session.redirectTo;
passport.authenticate('openidconnect', (err, user) => { passport.authenticate('openidconnect', (err, user) => {
if (err) return next(err); if (err) return next(err);
if (!user) return res.redirect(process.env.BASE_URL); if (!user) return res.redirect(process.env.CLIENT_URL);
req.logIn(user, err => { req.logIn(user, err => {
if (err) return next(err); if (err) return next(err);
// Use redirect saved from session // Use redirect saved from session
const redirectTo = redirectURI || process.env.BASE_URL; const redirectTo = redirectURI || process.env.CLIENT_URL;
delete req.session.redirectTo; delete req.session.redirectTo;
return res.redirect(redirectTo); return res.redirect(redirectTo);
}); });
})(req, res, next); })(req, res, next);
}); });
router.post('/logout', function (req, res, next) { router.get('/logout', function (req, res, next) {
req.logout(function (err) { req.logout(function (err) {
if (err) { return next(err); } if (err) { return next(err); }
var params = { var params = {
client_id: process.env.AUTH_CLIENT_ID, client_id: process.env.AUTH_CLIENT_ID,
returnTo: process.env.BASE_URL returnTo: process.env.CLIENT_URL
}; };
res.redirect(process.env.AUTH_DOMAIN + '/v2/logout?' + querystring.stringify(params)); res.redirect(process.env.AUTH_END_SESSION_URI + '?' + querystring.stringify(params));
}); });
}); });

View File

@@ -1,2 +1,2 @@
# SITE SETTINGS # SITE SETTINGS
BASE_URL= VITE_APIHOST=

View File

@@ -27,12 +27,13 @@ const userStore = useUserStore();
const APIHOST = import.meta.env.VITE_APIHOST; const APIHOST = import.meta.env.VITE_APIHOST;
async function logout() { async function logout() {
await fetch(`${APIHOST}/logout`, { // await fetch(`${APIHOST}/logout`, {
method: 'POST', // method: 'GET',
credentials: 'include', // credentials: 'include',
}); // });
userStore.user = null; userStore.user = null;
window.location.href = APIHOST + "/logout";
} }
function formatDate(dateStr) { function formatDate(dateStr) {

View File

@@ -2,7 +2,7 @@ import { useUserStore } from '@/stores/user'
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(),
routes: [ routes: [
// PUBLIC // PUBLIC
{ path: '/join', component: () => import('@/pages/Join.vue') }, { path: '/join', component: () => import('@/pages/Join.vue') },