У меня есть веб-приложение с бэкэндом Django и внешним интерфейсом NuxtJS, работающее в докере.Бэкэнд использует REST framework JWT Auth для управления доступом.Мой файл URL выглядит следующим образом:
urlpatterns = [
path('api/auth/login/', obtain_jwt_token),
path('api/auth/verify/', verify_jwt_token),
# other urls here
]
Docker-compose.yml
version: '3'
services:
backend:
build: ./backend
env_file:
- deploy.env
volumes:
- .:/backend
expose:
- "8000"
nginx:
image: nginx:latest
container_name: ng01
ports:
- "8000:8000"
volumes:
- ./backend:/backend
- ./nginx:/etc/nginx/conf.d
depends_on:
- backend
web:
build: ./web
ports:
- "80:3000"
links:
- backend
Эти два метода отлично работают с почтальоном, когда работает докер-контейнер - я могу получитьи проверьте токены JWT, как ожидалось.Тем не менее, когда интерфейс вызывает эти методы , метод входа в систему по-прежнему работает отлично, но метод проверки завершается ошибкой .В моем приложении есть ряд других методов, которые также отлично работают при вызове из внешнего интерфейса.Вот ошибка, которую я получаю:
Error: connect ECONNREFUSED 127.0.0.1:8000
Я нахожу это действительно странным, так как обычно это сообщение подразумевает какую-то проблему с CORS, но поскольку другие методы работают, я не понимаю, как это может бытьслучай здесь.
Вот как я вызываю API входа / проверки из моего внешнего интерфейса (в моем файле store.js).Всякий раз, когда пользователь обновляет страницу, nuxtServerInit
извлекает токен из cookie-файла браузера и пытается вызвать метод verify для получения профиля пользователя во внешнем интерфейсе
export const actions = {
async refreshAuth ({ dispatch, commit }, token) {
try {
var { data } = await axios.post(endpoint + '/auth/verify/', { token })
console.log(data)
if (data.token) {
commit('setUser', { token: data.token, profile: data.profile })
}
} catch (err) {
console.error('refreshAuth failed due to an error')
console.log(err)
}
},
async nuxtServerInit ({ dispatch, commit }, { req }) {
if (req.headers.cookie) {
let { token } = cookie.parse(req.headers.cookie)
await dispatch('refreshAuth', token)
}
},
async login ({ commit }, { email, password }) {
try {
var { data } = await axios.post(endpoint + '/auth/login/', { email, password })
await commit('setUser', {
token: data.token,
profile: data.profile
})
} catch (err) {
if (err.response.status === 401) {
commit('setError', 'Invalid credentials')
}
if (err.response.status === 403) {
commit('setUnverified', true)
}
}
}
}