如何将 cookie 从 apollo-server 传递到 apollo-clenet

Posted

技术标签:

【中文标题】如何将 cookie 从 apollo-server 传递到 apollo-clenet【英文标题】:How to pass cookie from apollo-server to apollo-clenet 【发布时间】:2020-03-20 03:04:26 【问题描述】:

变异

Mutation: 
  signUp: (_,  res ) => 
    try 
      res.cookie("jwt", "token", 
        httpOnly: true
      );
      return "Amasia";
     catch (error) 
      return "error";
    
  ;

Apollo-clenet-react

const [addTodo,  loading, error, data ] = useMutation(gql);

  const [formSignUp, setFormSignUp] = useState(
    lastName: '',
    firstName: '',
    password: '',
    email: '',
  );

  const change = e => 
    const  value, name  = e.target;
    setFormSignUp( ...formSignUp, [name]: value );
  ;

当我从 react 提出请求时。 这是我从服务器得到的答案。

1)数据 "data": "signUp": "Amasia"

2) 网络

应用程序

好吧,当我查看应用程序 Cookie 时,它​​是空的。

我做错了什么为什么 cookie 是空的?

【问题讨论】:

【参考方案1】:

apollo-client 和 apollo-server 设置中的问题 (apollo-cookie)。

我是这样设置的。

阿波罗客户端

import  render  from 'react-dom';
import React,  Suspense  from 'react';
import  ApolloClient  from 'apollo-client'
import  ApolloProvider  from 'react-apollo';
import  InMemoryCache  from 'apollo-cache-inmemory';
import  createHttpLink  from 'apollo-link-http';
import './i18n';

import Loading from './component/loading';
import RouteProj from './router';

const link = createHttpLink(
  uri: 'http://localhost:8000/graphql',
  credentials: 'include'
);

const client = new ApolloClient(
  cache: new InMemoryCache(),
  link,
);


render(
  <ApolloProvider client=client>
    <Suspense fallback=<Loading />>
      <RouteProj/>
    </Suspense>
  </ApolloProvider>,
  document.getElementById('root'),
);

阿波罗服务器

import cors from "cors";
import express from "express";
import  ApolloServer  from "apollo-server-express";
import mongoose from "mongoose";

import schema from "./schema";
import resolvers from "./resolvers";
import models from "./models";

  const app = express();

  var corsOptions = 
    origin: "http://localhost:3000",
    credentials: true
  ;
  app.use(cors(corsOptions));

  const server = new ApolloServer(
    typeDefs: schema,
    resolvers,
    context: ( res ) => (
      res
    )
  );

  server.applyMiddleware( app, path: "/graphql", cors: false );
  app.listen( port: 8000 );

【讨论】:

非常感谢!!!我已经尝试了 2 天来解决这个问题...

以上是关于如何将 cookie 从 apollo-server 传递到 apollo-clenet的主要内容,如果未能解决你的问题,请参考以下文章

我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据

Apollo-Server,如何与 SailsJS 一起使用?

将 JWT RefreshToken 作为 Set-Cookie 发送

在 sequelize 和 apollo-server 中从目标解析源关联时理解“包含”

下一个 Apollo 客户端不发送 Cookie

在 Heroku 上部署 react/apollo-server 应用程序