Небольшое непонимание процесса авторизации с 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 });
}
})