程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Graphene-Django 不向 React-Apollo 发送 HTTPOnly JWT Cookie大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Graphene-Django 不向 React-Apollo 发送 httpOnly JWT Cookie?

开发过程中遇到Graphene-Django 不向 React-Apollo 发送 httpOnly JWT Cookie的问题如何解决?下面主要结合日常开发的经验,给出你关于Graphene-Django 不向 React-Apollo 发送 httpOnly JWT Cookie的解决方法建议,希望对你解决Graphene-Django 不向 React-Apollo 发送 httpOnly JWT Cookie有所启发或帮助;

嗨,我一直在为 Django 服务器使用 GrapheneGraphQL 制作应用程序,React 客户端将使用 Apollo 访问该服务器.我正在使用 graphql_jwt 进行身份验证。

我已经设置了我的 GraphQL 服务器和客户端代码来读取 JWT,但我了解到 localstorage 不够安全,cookie 也不够安全。我设法在发出 tokenAuth 请求时找到了一种设置 httpOnly cookie 的方法,并且 cookie 仍然存在并且在 GraphiQL (localhost:8000) 中正常工作。

Graphene-Django 不向 React-Apollo 发送 HTTPOnly JWT Cookie

我使用 jwt_cookiegraphql_jwt.decorators 装饰器成功做到了这一点

from django.contrib import admin
from django.urls import path
from graphene_django.vIEws import GraphQLVIEw
from django.vIEws.decorators.csrf import csrf_exempt
from graphql_jwt.decorators import jwt_cookie

urlpatterns = [
    path('admin/',admin.site.urls),path('graphql/',jwt_cookie(csrf_exempt(GraphQLVIEw.as_vIEw(graphiql=TruE))))
]

不幸的是,当我从 Apollo (localhost:3000) 调用 tokenAuth 端点时,它既没有设置 cookie,也不能从我的后件中访问它(现在我想到它是有道理的)。 same-origininclude 凭据均不适用于服务器 httplinkApolloClIEnt 本身。

import { 
  ApolloClIEnt,gql,ApolloProvIDer,httplink,from,usequery,Apollolink
} from '@apollo/clIEnt';
import { onError } from '@apollo/clIEnt/link/error';
import { setContext } from 'apollo-link-context';

const errorlink = onError(({ graphQLErrors,networkError }) => {
  if (graphQLErrors) {
    graphQLErrors.forEach(({ message }) => {
      console.log(messagE);
    });
  }
  if (networkError) {
    console.log(networkError.messagE)
  }
});
const afterwarelink = new Apollolink((operation,forWARD) => {
  return forWARD(operation).map(response => {
    const context = operation.getContext();
    const { response: { headers } } = context;
    console.log(headers);
    return response;
  });
});


const link = from([
  errorlink,setContext((operation) => {
    console.log("HITTinG SET COntexT");
    // const token = localstorage.getItem('authToken');
    const token = cookies.get('authToken');
    console.log(token);
    return {
      headers: {
        Authorization: token ? `JWT ${token}` : ''
      }
    }
  }),afterwarelink,new httplink({ uri: 'http://localhost:8000/graphql/' })
]);

const clIEnt = new ApolloClIEnt({
  link,cache,typeDefs,credentials: 'include'
});

请忽略 refreshTokenauthToken 值。我使用 Js-cookie 包设置它们。但是正如您所看到的,headers 是空的,并且不是在客户端登录时设置的,而是在服务器上设置的。

Graphene-Django 不向 React-Apollo 发送 HTTPOnly JWT Cookie

问题:

如何将 jwt 响应头传递给前端?

解决方法

所以我能够解决这个问题。我在 Github 上发布了我的决议

https://github.com/flavors/django-graphql-jwt/issues/191

大佬总结

以上是大佬教程为你收集整理的Graphene-Django 不向 React-Apollo 发送 HTTPOnly JWT Cookie全部内容,希望文章能够帮你解决Graphene-Django 不向 React-Apollo 发送 HTTPOnly JWT Cookie所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。