React, Graphql & Passport.js - PullRequest
       67

React, Graphql & Passport.js

0 голосов
/ 26 марта 2019

Я пытаюсь настроить graphql с помощью passport.js, кажется, что все отлично работает на стороне сервера, но на стороне клиента, когда я проверяю, какой пользователь в данный момент вошел в систему (req.user), я получаю неопределенныйв то время как на стороне сервера я получаю текущего пользователя

Я использую свой сервер на локальном хосте: 4000 и клиент на локальном хосте: 3000.

Некоторые из моих настроек следующие:

Я пытался изменить учетные данные на стороне клиента и cors на стороне сервера

Конфигурация сервера

app.use(
    session({
        resave: false,
        saveUninitialized: false,
        secret,
        store: new MongoStore({
            url: MONGO_URI,
            autoReconnect: true
        }),
        cookie: {
            maxAge: 1000 * 60 * 60 * 2
        }
    })
);

const server = new ApolloServer({
    typeDefs,
    resolvers,
    // required for passport req.user access
    playground: { settings: { 'request.credentials': 'include' } },
    // so we have access to app req,res through graphql
    context: ({ req, res }) => ({
        req,
        res
    })
});

server.applyMiddleware({ app });

Client Config

const cache = new InMemoryCache();
const link = new HttpLink({
    uri: 'http://localhost:4000/graphql',
    credentials: 'same-origin',
});

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

Я надеюсь, что смогу получить доступ к текущему зарегистрированному пользователю на стороне клиента (реагирует)

1 Ответ

0 голосов
/ 29 марта 2019

На случай, если у кого-то возникнет такая же проблема, необходимо выполнить несколько действий, чтобы эта работа работала:

на клиенте:

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

на сервере:

// pass types and resolvers
const server = new ApolloServer({
    typeDefs,
    resolvers,
    // required for passport req.user access
    playground: { settings: { 'request.credentials': 'include' } },
    // so we have access to app req,res through graphql
    context: ({ req, res }) => ({
        req,
        res
    })
});

server.applyMiddleware({
    app,
    cors: { origin: 'http://localhost:3000', credentials: true }
});

у меня сработало :) 1009 *

...