fix: auto-detect all LAN IPs for dev auth and HMR

No more manual LAN_HOST or BETTER_AUTH_TRUSTED_ORIGINS for dev.
Uses os.networkInterfaces() to allow all machine IPs automatically.
This commit is contained in:
2026-03-24 03:35:02 +03:00
parent 4cae7b48ef
commit 0e53fba726
3 changed files with 22 additions and 21 deletions

View File

@@ -1,9 +1,16 @@
import type { NextConfig } from "next";
import os from "os";
// Автоопределение LAN IP для dev — убирает "Blocked cross-origin" без ручной настройки
const lanIPs = Object.values(os.networkInterfaces())
.flat()
.filter((iface) => iface && !iface.internal && iface.family === "IPv4")
.map((iface) => iface!.address);
const nextConfig: NextConfig = {
output: "standalone",
serverExternalPackages: ["@prisma/client", "bcryptjs", "ioredis"],
allowedDevOrigins: ["192.168.1.78"],
allowedDevOrigins: lanIPs,
};
export default nextConfig;

View File

@@ -1377,17 +1377,6 @@ cmd_dev() {
log_warn "MinIO ещё не готов — bucket создастся при следующем запуске"
fi
# Автоопределение LAN IP для auth
local lan_ip
lan_ip=$(hostname -I 2>/dev/null | awk '{print $1}' || true)
if [[ -n "$lan_ip" && -z "$(env_get LAN_HOST)" ]]; then
log_info "LAN IP: ${lan_ip}"
if ! grep -q "^LAN_HOST=" .env 2>/dev/null; then
echo "LAN_HOST=${lan_ip}" >> .env
log_ok "LAN_HOST=${lan_ip} добавлен в .env"
fi
fi
# Запуск
echo ""
log_ok "${GREEN}${BOLD}Готово! Запускаю dev-сервер...${NC}"

View File

@@ -1,24 +1,29 @@
import { betterAuth } from "better-auth";
import { prismaAdapter } from "better-auth/adapters/prisma";
import { prisma } from "./prisma";
import os from "os";
function getTrustedOrigins(): string[] {
// Prod: явный список origins
if (process.env.BETTER_AUTH_TRUSTED_ORIGINS) {
return process.env.BETTER_AUTH_TRUSTED_ORIGINS.split(",").map((o) => o.trim());
}
// Без явной конфигурации — разрешаем localhost на типичных портах Next.js
const origins: string[] = [];
for (let port = 3000; port <= 3010; port++) {
origins.push(`http://localhost:${port}`);
origins.push(`http://127.0.0.1:${port}`);
// Dev: автоопределение всех IP машины — работает с любого адреса без настройки
const hosts = new Set(["localhost", "127.0.0.1"]);
for (const ifaces of Object.values(os.networkInterfaces())) {
for (const iface of ifaces ?? []) {
if (!iface.internal && iface.family === "IPv4") {
hosts.add(iface.address);
}
}
}
// LAN-доступ: если задан LAN_HOST (IP сервера в локальной сети)
const lanHost = process.env.LAN_HOST;
if (lanHost) {
const origins: string[] = [];
for (const host of hosts) {
for (let port = 3000; port <= 3010; port++) {
origins.push(`http://${lanHost}:${port}`);
origins.push(`http://${host}:${port}`);
}
}