Задать вопрос
@chatterbox777

Не авторизуется форма?

Отправляю запрос axios.post на endpoint с данными email, login , приходит ответ от сервера 200 - и resultCode = 0 (т.е. все супер ты залогинился) проверяю что если resultCode === 0 то запрашиваю методом axois.get к endpoint auth/me приходит ответ resultCode : 1 , messages['You are not authorized'], какого черта если мне только что сервер дал ответ с axios.post что все супер.... код прилагаю... спасибо за ответы!

используется библиотке redux-form, поэтому данные email, login которые required согласно API отправляю чере зметод formData

API = https://social-network.samuraijs.com/docs (ветка /auth)

в главном компонент App.js реализован метод connect и созданы диспатчи , если надо скину в комменты... ибо пишет что сюда не влезает

код Login.jsx

import React from "react";
import { NavLink, BrowserRouter, Route } from "react-router-dom";
import * as axios from "axios";
import ava from "../assets/Din.jpg";
import classTags from "./Login.module.css";
import LoginReduxForm from "./LoginForm";

class Login extends React.Component {
  componentDidMount() {
    axios
      .get(`https://social-network.samuraijs.com/api/1.0/auth/me`, {
        withCredentials: true,
      })
      .then((response) => {
        debugger;
        if (response.data.resultCode === 0) {
          this.props.auth(response.data.data, true);
        }
      });
  }
  sendLoginPhoto() {
    axios
      .get(
        `https://social-network.samuraijs.com/api/1.0/profile/` + this.props.id
      )
      .then((response) => {
        this.props.loginPhoto(response.data.photos.small);
      });
  }

  render() {
    const onSubmit = (formData) => {
      console.log(formData);
      axios
        .post(`https://social-network.samuraijs.com/api/1.0/auth/login`, {
          email: formData.login,
          password: formData.password,
        })
        .then((response) => {
          debugger;
          console.log(response);
          if (response.data.resultCode === 0) {
            axios
              .get(`https://social-network.samuraijs.com/api/1.0/auth/me`, {
                withCredentials: true,
                headers: {
                  "API-KEY": "8d9bd45d-58a9-43ac-8b78-2c71c9e79611",
                },
              })
              .then((response) => {
                debugger;
                if (response.data.resultCode === 0) {
                  this.props.auth(response.data.data, true);
                }
              });
          }
          return null;
        });
    };
    debugger;

    return (
      <BrowserRouter>
        <div className={classTags.disp}>
          <NavLink to="/Login">
            {!this.props.login ? "Login" : this.props.login}
          </NavLink>
          {this.props.login ? (
            <button onClick={() => this.sendLoginPhoto()}>Получить фото</button>
          ) : null}

          {this.props.login ? (
            <img
              className={classTags.defaultImg}
              src={!this.props.photo ? ava : this.props.photo}
              alt="avatar"
            />
          ) : null}
          {this.props.login ? (
            <form>
              {" "}
              <button>{this.props.isAuth ? "Log out" : ""}</button>
            </form>
          ) : null}
          <div>
            {!this.props.isAuth ? (
              <Route
                path="/Login"
                render={() => (
                  <LoginReduxForm
                    auth={this.props.auth}
                    login={this.props.login}
                    isAuth={this.props.isAuth}
                    id={this.props.id}
                    photo={this.props.photo}
                    loginPhoto={this.props.loginPhoto}
                    onSubmit={onSubmit}
                  />
                )}
              />
            ) : null}
          </div>
        </div>
      </BrowserRouter>
    );
  }
}

export default Login;


код LoginForm.jsx

import React from "react";
import classTags from "./LoginForm.module.css";
import { reduxForm, Field } from "redux-form";

const LoginForm = (props) => {
  const { handleSubmit } = props;
  return (
    <div className={classTags.align}>
      <form onSubmit={handleSubmit} className={classTags.block} action="">
        <div>
          <Field
            name={"login"}
            component={"input"}
            placeholder={"Введите логин"}
          />
        </div>
        <div>
          <Field
            name={"password"}
            component={"input"}
            placeholder={"Введите пароль"}
            type="password"
          />
        </div>
        <div>
          <Field
            name={"rememberMeCheckBox"}
            type="checkbox"
            component={"input"}
          />{" "}
          remember me
        </div>
        <div>
          <button>sign in</button>
        </div>
      </form>
    </div>
  );
};

const LoginReduxForm = reduxForm({
  // a unique name for the form
  form: "login",
})(LoginForm);

export default LoginReduxForm;


код редьюсера auth-reducer.js (закомбайнен)

let initialState = {
  id: 0,
  email: "",
  login: "",
  isAuth: false,
  isFetching: false,
  photo: "",
};

export const authReducer = (state = initialState, action) => {
  switch (action.type) {
    case "AUTHORIZE":
      return {
        ...state,
        id: action.data.id,
        email: action.data.email,
        login: action.data.login,
        isAuth: action.auth,
      };
    case "LOGIN_PHOTO":
      return {
        ...state,
        photo: action.photo,
      };

    default:
      return state;
  }
};
  • Вопрос задан
  • 218 просмотров
Подписаться 2 Сложный Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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