fix(api): cookies not set on http connections

Frontend uses .env URL.
This commit is contained in:
2026-06-26 14:47:15 +01:00
parent 0b2c875889
commit 85ddd93757
3 changed files with 33 additions and 26 deletions

View File

@@ -32,6 +32,7 @@ services:
container_name: vod_frontend container_name: vod_frontend
environment: environment:
VITE_API_URL: ${BACKEND_URL} VITE_API_URL: ${BACKEND_URL}
VITE_FRONTEND_URL: ${FRONTEND_URL}
VITE_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID} VITE_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
depends_on: depends_on:
- backend - backend

View File

@@ -1,11 +1,12 @@
import { defineConfig } from 'vite' import { defineConfig, loadEnv } from 'vite'
import react from '@vitejs/plugin-react' import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite' import tailwindcss from '@tailwindcss/vite'
import flowbiteReact from "flowbite-react/plugin/vite"; import flowbiteReact from "flowbite-react/plugin/vite";
export default defineConfig(({ mode }) => { // change to function form
const env = loadEnv(mode, process.cwd(), '') // load all env vars
// https://vite.dev/config/ return {
export default defineConfig({
plugins: [react(), tailwindcss(), flowbiteReact()], plugins: [react(), tailwindcss(), flowbiteReact()],
preview: { preview: {
port: 5173, port: 5173,
@@ -15,7 +16,8 @@ export default defineConfig({
port: 5173, port: 5173,
strictPort: true, strictPort: true,
host: true, host: true,
origin: "http://0.0.0.0:5173", origin: env.VITE_FRONTEND_URL || "http://0.0.0.0:5173", // use it here
allowedHosts: true,
proxy: { proxy: {
'/api/v1': { '/api/v1': {
target: 'http://localhost:8080', target: 'http://localhost:8080',
@@ -24,4 +26,5 @@ export default defineConfig({
} }
} }
} }
}
}) })

View File

@@ -6,6 +6,7 @@ import com.ddf.vodsystem.entities.User;
import com.ddf.vodsystem.exceptions.NotAuthenticated; import com.ddf.vodsystem.exceptions.NotAuthenticated;
import com.ddf.vodsystem.services.UserService; import com.ddf.vodsystem.services.UserService;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseCookie; import org.springframework.http.ResponseCookie;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@@ -41,14 +42,15 @@ public class UserController {
@PostMapping("/login") @PostMapping("/login")
public ResponseEntity<APIResponse<Token>> login(@RequestBody Token token, public ResponseEntity<APIResponse<Token>> login(@RequestBody Token token,
HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
String jwt = userService.login(token.token()); String jwt = userService.login(token.token());
ResponseCookie cookie = ResponseCookie.from("token", jwt) ResponseCookie cookie = ResponseCookie.from("token", jwt)
.httpOnly(true) .httpOnly(true)
.maxAge(jwtExpiration / 1000) .maxAge(jwtExpiration / 1000)
.sameSite("None") .sameSite(request.isSecure() ? "None" : "Lax")
.secure(true) .secure(request.isSecure())
.path("/") .path("/")
.build(); .build();
@@ -60,12 +62,13 @@ public class UserController {
} }
@PostMapping("/logout") @PostMapping("/logout")
public ResponseEntity<APIResponse<Void>> logout(HttpServletResponse response) { public ResponseEntity<APIResponse<Void>> logout(HttpServletResponse response,
HttpServletRequest request) {
ResponseCookie cookie = ResponseCookie.from("token", "") ResponseCookie cookie = ResponseCookie.from("token", "")
.httpOnly(true) .httpOnly(true)
.maxAge(0) .maxAge(0)
.sameSite("None") .sameSite(request.isSecure() ? "None" : "Lax")
.secure(true) .secure(request.isSecure())
.path("/") .path("/")
.build(); .build();