Я использую React Authentication с ApolloGraphQL.
Контекст:
В signin.js я генерирую токен, когда пользователь нажимает кнопку отправки и устанавливает его в Localstorage.
Затем я извлекаю токен из App.js и могу передать его в GraphQL, чтобы его можно было найти в server.js.
Проблема:
После того, как пользователь нажмет кнопку отправки, я вижу маркер нового поколения в: Инструменты разработчика> Приложение> Локальное хранилище.
Но он возвращает 'null' для 'токена на стороне клиента' в App.js
Когда я снова выполняю вход, я вижу ранее сгенерированный токен как значение «клиентского токена», что означает, что он не получает обновленный токен из LocalStorage.
Очевидно, что из-за этого «токен на стороне сервера» в первый раз является нулевым и возвращает ранее сгенерированный токен во второй раз.
приложение / клиент / SRC / компоненты / signin.js
handleSubmit = (event, SignIn) => {
event.preventDefault();
SignIn().then(({ data }) => {
localStorage.setItem('token', data.SignIn.token);
this.clearState();
})
}
приложение / клиент / SRC / app.js
//initiating the ApolloClient
const client = new ApolloClient({
uri: 'http://localhost:4000/graphql',
fetchOptions: {
credentials: 'include'
},
//adding token to the localstorage
request: operation => {
const token = localStorage.getItem('token');
operation.setContext({
headers:{
authorization: token
}
})
console.log(`client side token ${token}`);
},
//catching the most common network error, if any
onError: ({ networkError }) => {
if(networkError){
console.log('Network Error', networkError);
}
}
});
server.js
const app = express();
app.use(async (req, res, next) => {
const token = req.headers['authorization'];
console.log(`server side token: ${token}`);
next();
});