Я использую Go Fiber и его промежуточное программное обеспечение для сеансов для простой системы аутентификации.
Все работает, за исключением того, что браузер не сохраняет файлы cookie.
мой бэкэнд обслуживается https://127.0.0.1:3033 и мой интерфейс включен https://127.0.0.1:4321
это файл cookie, отправленный сервером:
session_id=7bbb86ac-04e7-43b2-8f0a-345d720efa35; max-age=900; domain=127.0.0.1; path=/; HttpOnly; secure; SameSite=None
Это моя конфигурация сеанса Fiber:
func initSessionStore() *session.Store {
store := session.New(session.Config{
CookieHTTPOnly: true,
Expiration: time.Minute * 15,
Storage: sqlite3.New(),
CookieSecure: false,
CookieSameSite: "None",
CookieDomain: "127.0.0.1",
CookiePath: "/",
})
return store
}
Это моя конфигурация Cors:
cors.New(cors.Config{
AllowOrigins: os.Getenv("FRONTEND_URL"), // 127.0.0.1:4321
AllowCredentials: true,
}),
Что я уже пробовал:
Какова цель установки CookieDomain на 127.0.0.1 вместо того, чтобы просто оставить его пустым? Кроме того, в вашем коде указано «CookieSecure: false», но файл cookie показывает «безопасно». Итак, код, похоже, противоречит результату, действительно ли он из одного и того же запуска? Кроме того, как вы определили, что браузер не сохраняет файлы cookie?
1. «безопасно»: вы должны использовать https даже на локальном хосте. 2. Файлы cookie доменных имен на IP-адресах вроде бы работают, но это совершенно бессмысленная идея, не делайте этого.
@Evert, вот как я называю API: js fetch("https://127.0.0.1:3033/auth/users/user-info" , {credentials:"include", })
Я использую https на своем локальном хосте @volker
Когда вы используете домены, файлы cookie будут защищены, я просто возился с опциями, поэтому я использую домен. @SteffenUllrich
@Volker https, необходимый для локального хоста, является устаревшей информацией. Раньше это было правдой, но теперь localhosti считаются безопасным контекстом.
Согласен с Амиррезой, удалите домен. После того, как этот файл cookie установлен, где вы ожидаете его появление? Файл cookie, установленный в вашем внутреннем источнике, не будет отображаться в вашем внешнем источнике, но он должен быть отправлен с любыми последующими запросами к серверной части.

Наконец я понял, почему это не сработало.
Я забыл использовать credentials:"include" там, где OAuth приземлялся во внешнем интерфейсе, не могу поверить, что забыл это...
Как вы вызываете бэкэнд из внешнего интерфейса?