установить текущего пользователя в контексте, используя сервер Apollo - PullRequest
0 голосов
/ 28 августа 2018

У меня есть это промежуточное ПО, и мне нужно, чтобы текущий пользователь установил его в контексте сервера apollo

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


 }
 next()

   })

и необходимо установить текущего пользователя в контексте

  const SERVER = new ApolloServer({
      schema,
      context:{
          currentUser //need to set this current user
         }
  })


   SERVER.applymiddleware({app})

1 Ответ

0 голосов
/ 28 августа 2018

контекстный API в сервере Apollo предлагает обработку запроса следующим образом

const initGraphQLserver = () => {
  const graphQLConfig = {
    context: ({ req, res }) => ({
      user: req.user,
    }),
    rootValue: {},
    schema,
  };

  const apolloServer = new ApolloServer(graphQLConfig);
  return apolloServer;
};

Это предполагает, что у вас будет надлежащее промежуточное ПО, которое будет анализировать cookie или заголовок. Это зависит от вашего механизма аутентификации, так как вам нужно было предварительно настроить пользователя для запроса в некотором промежуточном программном обеспечении, если вы хотите использовать JWT, вы можете использовать, например, это промежуточное программное обеспечение

const auth = (req, res, next) => {
  if (typeof req.headers.authorization !== 'string') {
    return next();
  }

  const header = req.headers.authorization;
  const token = header.replace('Bearer ', '');
  try {
    const jwtData = jwt.verify(token, JWT_SECRET);
    if (jwtData && jwtData.user) {
      req.user = jwtData.user;
    } else {
      console.log('Token was not authorized');
    }
  } catch (err) {
    console.log('Invalid token');
  }
  return next();
};

Это промежуточное ПО будет вводить пользователя, если токен jwt верен, тогда в файле вашего сервера вам нужно будет иметь следующий порядок промежуточного ПО

const app = express();

app.use(auth);

initGraphQLserver().applyMiddleware({ app });

Теперь у вас должен быть пользователь в контексте вашей схемы. Я надеюсь, что это понятно, код не завершен, но все должно быть легко завершить.

...