Задать вопрос
@SNina
Отчаянно пытаюсь научиться писать хорошие сайты

Как исправить ошибку You are not authorized?

С помощью GraphQL сделала регистрацию и отдельно вход Login. При регистрации никаких ошибок нет. При входе, если пишу неправильный email, - сервер выдает,что такого email нет. Если пишу правильный email - то все нормально. Но при попытке войти в приложение на страницу, где должна выводиться информация с сервера, сервер выдает ошибку You are not authorized. Что я не так написала? Просьба написать код, а то я не разбираюсь в GraphQL и уже целый день ищу информацию в интернете, но не могу найти. Мой код:
index.js:
import ReactDOM from "react-dom";
import App from "./components/App/App";
import {
  ApolloClient,
  InMemoryCache,
  ApolloProvider  
} from "@apollo/client";i
import { Provider } from "react-redux";

const client = new ApolloClient( {
  uri: "http://localhost:4000/api",
  cache: new InMemoryCache() 
} );


ReactDOM.render(
  <React.StrictMode>  
      <ApolloProvider client={ client }>
        <App/>
      </ApolloProvider>
  </React.StrictMode>,
  document.getElementById( "root" )
);


Login.js:
import { gql, useMutation, useQuery } from "@apollo/client";

const LOG_IN = gql`
  mutation LogIn($email: String! 
                 $password: String!) {
    login ( email: $email, password: $password ) {
      token
    }
  }
`;

function LogIn() {
 const navigate = useNavigate();
const [ login, { error }, ] = useMutation( LOG_IN, {
    onCompleted: ({ login }) => {
      localStorage.setItem( AUTH_TOKEN, login.token );
      dispatch( logIn() );
      navigate( "/process" );
    }
  } );

const onSubmit = async({ email, password }) => {
    console.log( email, password );
    login( {
      variables: {
        email: email,
        password: password
      }
    } );   
  };

<form>......


Process.js (который должен получать данные с сервера):
const GET_PROCESS = gql`
  query GetProcess {
    processList {
      id
      name
    }
  }
`;

function Process() { 
  const { loading, error, data } = useQuery( GET_PROCESS );

  console.log(data);

  if( loading ) return "Loading...";
  if( error ) return `Error! ${ error.message }`;

  return (
    <>
      <h1>Process</h1>
        ...
    </>
  );
}

export default Process;
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Нетология
    Frontend-разработка на React
    10 недель
    Далее
  • Академия Eduson
    React-разработчик
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
EugeneLobach
@EugeneLobach
Web разработчик
Надо, что бы сервер понимал, от какого юзера пришел запрос.
То есть, надо передать в хедере запроса токен, который вы скорее всего получаете от сервера при логине.
А вот как его передовать уже зависит от самого сервера
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
от 250 000 до 300 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽