Небольшое непонимание процесса авторизации с JWT

Проект строится с использованием React + Redux + Apollo Client + Graphql

Когда нам необходимо произвести авторизацию в базе данных пользователей, нужно добавлять в свой запрос параметр headers и в нем указывать токен (который, допустим, сохранили в localStorage), например так:

const client = new ApolloClient ({
 uri: 'http://localhost:4000/api',
 headers: {
  authorization: `Bearer ${localStorage.token}`,
 }, 
});

Далее, серверная функция проверяет этот токен и "устанавливает" личность пользователя.

Вопрос в следующем: где брать данный токен в случае регистрации (для помещения в headers)? У пользователя еще нет сохраненного токена, но сервер его требует и не пропускает регистрацию, если его не указать. Если в запросе убрать параметр headers, то регистрация пройдет, но сервер не поймет, кто является текущим пользователем.


Ответы (1 шт):

Автор решения: Дмитрий

У Вас токен получается из localStorage только один раз, при загрузке страницы.

const client = new ApolloClient({
  uri: 'http://localhost:4000/api',
  request (operation) {
    const headers = {};
    const token = localStorage.getItem('token');
    if (token) headers.authorization = 'Bearer ' + token;
    operation.setContext({ headers });
  }
})
→ Ссылка