当前位置: 首页 > 知识库问答 >
问题:

通过CORS的GraphQL请求的无效响应和通过JWT的GraphiQL处理身份验证的有效响应

芮岳
2023-03-14

问题是,我总是收到一个没有任何有效负载的400响应代码。甚至graphql传递了代码200和带有错误块的有效负载。GraphiQl工作正常,这一事实告诉我设置和模式是正确的。所以…我卡住了。也许,有什么想法,去哪里看看?

我不认为它失败是因为cors本身。我的应用程序在 DRF 下运行良好。我决定尝试新的技术并使用GQL覆盖应用程序。

我的起源:http://127.0.0.1:8080

我的Apollo客户:

const cache = new InMemoryCache();
const link = new HttpLink({
  uri: "http://127.0.0.1:8000/graphql/",
  credentials: "include", // cookies enabled
  headers: {
    "X-Csrftoken": getTokenCsrf(),  
    "Content-Type": "application/json"
  },
  fetchOptions: {
    mode: "cors"
  }
});

const client = new ApolloClient({
  cache,
  link
});

这是我的请求(vars值通过状态来自表单):

const AUTH_QUERY = gql`
  mutation TokenAuth($username: String!, $password: String!) {
    tokenAuth(username: $username, password: $password) {
      token
    }
  }
`;

我使用react-apollo-的钩子来执行查询:

const [sendCreds, loading, error] = useMutation(AUTH_QUERY);
const handleSubmit = e => {
    sendCreds({
      variables: { username: state.username, password: state.password }
    });
};

我的架构(根据文档):

class Mutation(graphene.ObjectType):
    token_auth = graphql_jwt.ObtainJSONWebToken.Field()
    verify_token = graphql_jwt.Verify.Field()
    refresh_token = graphql_jwt.Refresh.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

从 GraphiQL 处理此查询会给我一个有效的响应。GraphiQL 在浏览器的另一个选项卡上运行 http://127.0.0.1:8000/graphql。

查询:

mutation TokenAuth($username: String!, $password: String!) {
  tokenAuth(username: $username, password: $password) {
    token
  }}

变量:

   {"username": "qwerty", "password": "qwerty"}

响应:

{
  "data": {
    "tokenAuth": {
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InF3ZXJ0eSIsImV4cCI6MTU2NjMwMTkwNiwib3JpZ0lhdCI6MTU2NjMwMTYwNn0.NzgecEfFcnsrudcgrlZyBCC1rutoVJFciUI-ugFq9Fg"
    }}}

共有1个答案

蒋畅
2023-03-14

于是,问题就解决了。别忘了,当你按下没有明确定义类型的按钮时,会使用“提交”类型。

<form >
  <div className="input-field">
    <input type="text" id="username" />
    <input type="password" id="password" />        
    <button
      type="button"  // that string solved my problem.
      onClick={handleSubmit}
    >
      {msg}
    </button>      
  </div>
</form>

当您按下提交类型按钮时,将调用render,响应将尝试将内容分派给未安装的组件。但如果您的按钮类型为“button”,则请求工作正常。我希望我的折磨能为某人节省时间。

 类似资料:
  • 问题内容: 问题: 我们有一个基于Spring MVC的RESTful API,其中包含敏感信息。该API应该是安全的,但是不希望随每个请求一起发送用户凭证(用户/密码组合)。根据REST准则(和内部业务要求),服务器必须保持无状态。该API将由另一台服务器以mashup方式使用。 要求: 客户端使用凭据向(不受保护的URL)发出请求;服务器返回一个安全令牌,该令牌包含足够的信息供服务器验证未来的

  • 我只是在两个问题中输入,然后程序似乎继续没有问题。但是,我需要这些代码通过cron任务实现自动化,所以我不希望它暂停程序来问我这两个问题。是不是有什么东西我不提供给它,这样它就不会问这个了?我需要做些什么来阻止它的追问?希望有人有一些想法。多谢了。

  • 嗨,我正在通过axios尝试reactjs POST请求,但出现错误,我查看了所有文档,但错误未得到解决。 这是我的错误: 未捕获(promise中)错误:请求在XMLHttpRequest的结算(eval at(bundle.js:4621),:15:15)处的createError(eval at(bundle.js:4615),:18:12)处失败,状态代码为400。手工装载(在(捆js:4

  • 我已经创建了一个简单的spring boot应用程序,我已经使用KeyCloak对其进行了身份验证。当我调用服务(http://localhost:8080/table1data)时,它会将我重定向到keycloak登录页面,在该页面中插入我的领域用户名和密码,然后返回数据。现在到现在一切都很好。 我想要另一个场景。如果我的用户已经拥有相应领域的有效令牌,并且他希望使用正确的令牌访问相同的URL,

  • 经过身份验证的请求可用于获取授权代码令牌,以访问系统中的所有者资源。 对授权端点发出的请求会导致用户身份验证,并在向授权端点发送请求时提供明确的凭据。 经过身份验证的请求包含以下参数 - response_type - 这是一个必需参数,用于将值设置为'code',用于请求授权代码。 如果授权请求中没有'response_ type'参数,则授权服务器返回错误响应。 由于无效或不匹配的重定向URI

  • 我可以在https://protocality-website/graphQL/gql上访问我们的graphQL,如果运行以下查询,它将返回预期的结果: 现在,我尝试将其应用于jmeter 我在我的线程组中创建了一个HTTP请求,协议:https,服务器名:protectary-website,方法:GET,路径:/graphql/gql 我创建HTTP头管理器,并包含所需的承载令牌和内容类型头