предыстория истории
внешний интерфейсvue + axios,
Задний конец используетko2,использоватьkoa-passport + passport-localПомогите мне справиться с входом и выходом из системы с помощьюkoa-generic-sessionобработка сеанса,koa2-corsобрабатывать перекрестный домен
описание проблемы
Когда я сегодня зашел в систему, я обнаружил接口调用正常,数据正常传递,redis里也有存储相应值 Только на главной странице никогда не устанавливались файлы cookie., статус входа не может быть сохранен.
Разочаровывающее решение
Когда я тестировал функцию раньше, я мог видеть, что cookie был установлен, а затем я думал, что это потому, что мои библиотеки были написаны неправильно. Повозившись с ним несколько часов, мой разум рухнул.
Позже я перезапустил проект A, установил cookie напрямую и получил доступ к интерфейсу прямо из браузера, и cookie был виден.
Вызовите этот интерфейс с помощью интерфейса, куки все еще там (здесь я забыл очистить запись куки, это локальный хост при локальном запуске) (Сварливый брат)
Затем позвоните в библиотеку в бесконечную контур подозревающую ошибку API (brink)
Затем я попытался с внешнего интерфейса вызвать интерфейс проекта А, куки нет? (почистил куки), удивился, почему он пропал на время.
Затем, после многих тестов, я, наконец, обнаружил, что могу установить cookie прямо в интерфейсе, но внешний запрос не может его получить.
ок, я наконец-то нашел настоящую причину, и когда раздражительный брат дошел до этого момента, он уже доставал ее с обеда до вечера.
Ссылаться на:
liyuling52011 — Vue не может выполнять междоменные запросы после добавления withCredentials
Почему такая проблема?
внешний интерфейсlocalhost:8080доступ к серверной частиlocalhost:3000Будут междоменные проблемы, и я использую cors для их решения.
Но в то же время бывает и ситуация, когда куки не могут быть доставлены, по следующим причинам
По умолчанию запросы из разных источников не предоставляют учетные данные (файлы cookie, HTTP-аутентификация, SSL-сертификаты на стороне клиента и т. д.).
Если отправлен учетный запрос, но в ответе сервера нет соответствующего заголовка, то браузер не передаст соответствующий контент в JavaScript, и запрос не сможет получить результирующие данные (браузер их получает, но мы запрашиваем его Метод не может быть получен, потому что он заблокирован браузером)
Как решить
Для этого установите соответствующий заголовок во время внутренней обработки CORS:
// 响应头表示是否可以将对请求的响应暴露给页面
Access-Control-Allow-Credentials: true
// 允许跨域操作的具体域名
Access-Control-Allow-Origin: "http://localhost:8080"
// 允许跨域的HTTP方法
Access-Control-Allow-Methods: ["GET","POST","DELETE"]
// 列出将会在正式请求的 Access-Control-Expose-Headers 字段中出现的首部信息
Access-Control-Allow-Headers: ["Content-Type", "Authorization", "Accept"]
Затем выполните следующую обработку на переднем конце:
// 表示跨域请求时是否需要使用凭证
axios.defaults.withCredentials = true
@оставь чашку, после этого старый брат напомнил, если вы установите
Access-Control-Allow-Origin: *,Независимо от тогоwithCredentialsНет настройки, куки нельзя переносить
задача решена
На решение проблемы ушло так много времени, но в конечном счете это все еще была слишком раздражительность, нервный срыв и отсутствие прочной основы компьютерной сети. :