ошибка 422 после вызова API от реакции на рельсы - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть API-интерфейс RoR, и я создаю страницу реакции с редукцией. Я вызываю задачи моего пользователя. Вот как это работает до сих пор: когда он регистрируется, я сохраняю ключ токена в состоянии, а затем использую его для вызова API, чтобы получить мои задачи (индекс). У меня есть мое действие здесь:

  def index
    @todos = current_user.todos
    json_response(@todos)
  end

Это блок, который выходит из строя:

 loginHandler() {
        const { email, password } = this.state;
        const { login, tokenize, token } = this.props;
        axios.post('http://localhost:3001/auth/login', {withCredentials: true,
        email: email, password: password})
            .then(response => {
                login(true);
                tokenize(response.data.auth_token);
                axios.get('http://localhost:3001/todos', {Authorization: token}) // Error occurs
              .then(response => {
                console.log(response);
              }).catch(error => console.log(error));
            }).catch(error => console.log(error));
    }

Где токенизация и вход в систему - это действия, переданные в Redx. Ошибка во втором вызове ax ios, где я получаю 422 необработанных объекта. Я сделал ручной тест с http ie из моего терминала, и там он работает . Также отладьте мое действие todos # index, и это ошибка со стороны сервера:

AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".).

Мой RoR равен 5.2 и ruby 2.6.3. Логин работает, регистрация работает, но метод get для todos не работает ТОЛЬКО в реакции. В http ie из моего терминала это работает. Я некоторое время боролся с этим, и ни один ресурс онлайн не был действительно полезен, что заставило меня подумать, что там есть какая-то опечатка, которую я не видел.

1 Ответ

2 голосов
/ 24 февраля 2020

Авторизация должна отправляться в заголовках:

axios.get('http://localhost:3001/todos', { headers : { Authorization: token } })

https://flaviocopes.com/axios-send-authorization-header/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...