@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;
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
EugeneLobach
@EugeneLobach
Web разработчик
Надо, что бы сервер понимал, от какого юзера пришел запрос.
То есть, надо передать в хедере запроса токен, который вы скорее всего получаете от сервера при логине.
А вот как его передовать уже зависит от самого сервера
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы