Admin SSO: shared session with main site
- AdminJS uses main site session (no separate login) - Login once at /auth/login → /admin accessible if role=admin - Non-admin users redirected to /auth/login from /admin - Removed separate AdminJS authentication (cookieName/cookiePassword)
This commit is contained in:
parent
4008155abd
commit
0664c018c6
33
lib/admin.js
33
lib/admin.js
@ -193,27 +193,22 @@ async function setupAdmin(app) {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
// Auth: only admin users
|
// Auth: use main site session — admin role required
|
||||||
const bcrypt = require('bcrypt');
|
const adminRouter = AdminJSExpress.buildRouter(adminJs);
|
||||||
const db = require('./db');
|
|
||||||
|
|
||||||
const adminRouter = AdminJSExpress.buildAuthenticatedRouter(adminJs, {
|
// Middleware: check main session for admin role before AdminJS
|
||||||
authenticate: async (email, password) => {
|
app.use(adminJs.options.rootPath, (req, res, next) => {
|
||||||
const user = await db.findUserByEmail(email);
|
// Allow AdminJS static assets (js, css, etc.)
|
||||||
if (!user || user.role !== 'admin') return null;
|
if (req.path.match(/\.(js|css|png|svg|ico|map|woff|woff2|ttf)$/)) return next();
|
||||||
const valid = await bcrypt.compare(password, user.password_hash);
|
|
||||||
if (!valid) return null;
|
|
||||||
return { email: user.email, role: user.role, id: user.id };
|
|
||||||
},
|
|
||||||
cookieName: 'adminjs',
|
|
||||||
cookiePassword: process.env.SESSION_SECRET || 'adminjs-secret-change-me',
|
|
||||||
}, null, {
|
|
||||||
resave: false,
|
|
||||||
saveUninitialized: false,
|
|
||||||
secret: process.env.SESSION_SECRET || 'adminjs-secret-change-me',
|
|
||||||
});
|
|
||||||
|
|
||||||
app.use(adminJs.options.rootPath, adminRouter);
|
if (req.session && req.session.user && req.session.user.role === 'admin') {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not admin — redirect to login with return URL
|
||||||
|
req.session.returnTo = '/admin';
|
||||||
|
return res.redirect('/auth/login');
|
||||||
|
}, adminRouter);
|
||||||
|
|
||||||
return adminJs;
|
return adminJs;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user