Я работаю над проектом, использующим Django в качестве бэкэнда, Vue в качестве внешнего интерфейса и пытаюсь реализовать Apollo / Graphene / GraphQL в качестве слоя передачи данных.Большинство из них работает, но я не разбираюсь в настройках CORS / CSRF.
(Было очень много исследований здесь. здесь , здесь и здесь .
Кто-нибудь знает, как решить проблему защиты API graphql / graphene с помощью токена CSRF? На терминале журнала django я получаю:
Forbidden (CSRF token missing or incorrect.): /graphql/
...в то время как на консоли Vue / Js я вижу
Cross-Origin Request Blocked: The Same Origin Policy disallows
reading the remote resource at http://localhost:8080/sockjs-node/
info?t=1558447812102.
Вы можете увидеть (и проверить, что это с открытым исходным кодом) этот проект здесь .
http://localhost:8000, http://localhost:8000/admin и http://localhost:8000/ работают хорошо. Запрос query{menuItems{id, title, slug, disabled}}
хорошо работает в графике.
settings.py:
INSTALLED_APPS = [
# ...
'corsheaders',
'rest_framework',
'webpack_loader',
'graphene_django',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # new
# ...
]
CORS_ORIGIN_ALLOW_ALL = DEBUG # (=True)
Проблеманаходится здесь: * yarn serve
работает на http://localhost:8080 * ./manage.py runserver
работает на http://localhost:8000, и прокси через веб-пакет на сервере Vue frontend dev.
vue.config.js:
module.exports = {
// The base URL your application bundle will be deployed at
publicPath: 'http://localhost:8080',
// ...
chainWebpack: config => {
// ...
config.devServer
.public('http://localhost:8080')
// ...
vue-apollo.js:
const httpEndpoint = process.env.VUE_APP_GRAPHQL_HTTP || 'http://localhost:8000/graphql/'
РЕДАКТИРОВАТЬ: Если я обернуть graphql/
api urlpath с csrf_exempt
, он работает:
urlpatterns = [ # ...
path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True, schema=schema))),
]
Но это BadIdea (TM) с точки зрения безопасности. Как я могу получить этот токен сюда?Можно ли использовать Vue с Django и webpack_loader?