Fix local network authentication

This commit is contained in:
2024-12-23 23:37:44 -05:00
parent e99e02c6dd
commit 9218d0a0db
2 changed files with 38 additions and 14 deletions

View File

@@ -38,7 +38,13 @@ const corsOptions = {
console.log('CORS check for origin:', origin); console.log('CORS check for origin:', origin);
// Check if origin is allowed // Allow local network IPs (192.168.1.xxx)
if (origin && origin.match(/^http:\/\/192\.168\.1\.\d{1,3}(:\d+)?$/)) {
callback(null, true);
return;
}
// Check if origin is in allowed list
if (!origin || allowedOrigins.indexOf(origin) !== -1) { if (!origin || allowedOrigins.indexOf(origin) !== -1) {
callback(null, true); callback(null, true);
} else { } else {
@@ -96,19 +102,19 @@ app.post('/login', (req, res) => {
expiresIn: '24h' expiresIn: '24h'
}); });
// Determine if request is from localhost // Determine if request is from local network
const isLocalhost = req.headers.origin?.includes('localhost'); const isLocalNetwork = req.headers.origin?.includes('192.168.1.') || req.headers.origin?.includes('localhost');
const cookieOptions = { const cookieOptions = {
httpOnly: true, httpOnly: true,
secure: !isLocalhost, secure: !isLocalNetwork, // Only use secure for non-local requests
sameSite: isLocalhost ? 'lax' : 'none', sameSite: isLocalNetwork ? 'lax' : 'none',
path: '/', path: '/',
maxAge: 24 * 60 * 60 * 1000 // 24 hours maxAge: 24 * 60 * 60 * 1000 // 24 hours
}; };
// Add domain only for production // Only set domain for production
if (!isLocalhost) { if (!isLocalNetwork) {
cookieOptions.domain = '.kent.pw'; cookieOptions.domain = '.kent.pw';
} }
@@ -163,13 +169,13 @@ app.get('/check', (req, res) => {
}); });
app.post('/logout', (req, res) => { app.post('/logout', (req, res) => {
const isLocalhost = req.headers.origin?.includes('localhost'); const isLocalNetwork = req.headers.origin?.includes('192.168.1.') || req.headers.origin?.includes('localhost');
const cookieOptions = { const cookieOptions = {
httpOnly: true, httpOnly: true,
secure: !isLocalhost, secure: !isLocalNetwork,
sameSite: isLocalhost ? 'lax' : 'none', sameSite: isLocalNetwork ? 'lax' : 'none',
path: '/', path: '/',
domain: isLocalhost ? undefined : '.kent.pw' domain: isLocalNetwork ? undefined : '.kent.pw'
}; };
console.log('Clearing cookie with options:', cookieOptions); console.log('Clearing cookie with options:', cookieOptions);

View File

@@ -72,8 +72,10 @@ export default defineConfig(({ mode }) => {
changeOrigin: true, changeOrigin: true,
secure: true, secure: true,
cookieDomainRewrite: { cookieDomainRewrite: {
"dashboard.kent.pw": "localhost", "dashboard.kent.pw": "",
}, },
hostRewrite: true,
autoRewrite: true,
configure: (proxy, _options) => { configure: (proxy, _options) => {
proxy.on("error", (err, req, res) => { proxy.on("error", (err, req, res) => {
console.log("Auth proxy error:", err); console.log("Auth proxy error:", err);
@@ -85,13 +87,29 @@ export default defineConfig(({ mode }) => {
); );
}); });
proxy.on("proxyReq", (proxyReq, req, _res) => { proxy.on("proxyReq", (proxyReq, req, _res) => {
proxyReq.setHeader('X-Forwarded-Host', req.headers.host);
proxyReq.setHeader('X-Forwarded-Proto', 'http');
const origin = req.headers.origin || `http://${req.headers.host}`;
proxyReq.setHeader('origin', origin);
console.log("Outgoing auth request:", { console.log("Outgoing auth request:", {
method: req.method, method: req.method,
url: req.url, url: req.url,
headers: req.headers, headers: proxyReq.getHeaders(),
}); });
}); });
proxy.on("proxyRes", (proxyRes, req, _res) => { proxy.on("proxyRes", (proxyRes, req, res) => {
const cookies = proxyRes.headers['set-cookie'];
if (cookies) {
proxyRes.headers['set-cookie'] = cookies.map(cookie =>
cookie
.replace(/Domain=[^;]+;/g, '')
.replace(/Secure;/g, '')
.replace(/SameSite=None/g, 'SameSite=Lax')
);
}
console.log("Auth proxy response:", { console.log("Auth proxy response:", {
statusCode: proxyRes.statusCode, statusCode: proxyRes.statusCode,
url: req.url, url: req.url,