Как проверить токен из Localstorage и вернуть currentUser с сервера Apollo в React-интерфейс? - PullRequest
0 голосов
/ 24 июня 2019

У меня уже есть промежуточное ПО jwt, которое проверяет токен и возвращает currentUser в React-интерфейс:

app.use(async (req, res, next) => {
    const token = req.headers['authorization'];
    if(token !== "null") {
        try{
            const currentUser = await jwt.verify(token, process.env.SECRET)
        } catch {
        console.error(err);
    }
}
next();
});

Теперь я хочу интегрировать логику в следующий сервер Apollo:

const app = express();
const server = new ApolloServer({
  typeDefs: gql(typeDefs),
  resolvers,
  context: async () =>({ 
  db,
  secret: process.env.SECRET,
  }),
});

app.use(cors(corsOptions));
server.applyMiddleware({ app });

В конце значение currentUser должно быть доступным для использования на входном интерфейсе реагирования.
Как мне этого добиться?

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете добавить currentUser к объекту request внутри промежуточного программного обеспечения.Затем вы передаете его скопировать из запроса в контекст GraphQL.Затем вы можете добавить распознаватель currentUser и просто вернуть пользователя из контекста.

Ваше промежуточное программное обеспечение

app.use(async (req, res, next) => {
    const token = req.headers['authorization'];
    if(token !== "null") {
        try{
            req.currentUser = await jwt.verify(token, process.env.SECRET)
        } catch {
        console.error(err);
    }
}
next();
});

Ваш сервер

const app = express();
const server = new ApolloServer({
  typeDefs: gql(typeDefs),
  resolvers,
  context: ({ req }) =>({ 
    currentUser: req.currentUser,
    db,
    secret: process.env.SECRET,
  }),
});

app.use(cors(corsOptions));
server.applyMiddleware({ app });

и распознаватели

const resolvers = {
  Query: {
    currentUser: (parent, args, context) => context.currentUser,
    ...
  }
}

Добавьте соответствующее определение типа, и вы сможете запросить текущего пользователя у вашего клиента.

Если вам нужна дополнительная информация , вот подробное руководство , котороеможет быть полезным.

...