выдает ту же ошибку, если делать по примеру ksa.(без импорта userController в basketController код полностью рабочий как вытянуть токен из user controller не сбивая его работу?)
←→1 of 3 errors on the page
Unhandled Rejection (TypeError): Cannot read properties of undefined (reading 'data')
click
C:/online-store-full-course-master/client/src/pages/Auth.js:32
29 | user.setIsAuth(true)
30 | history.push(SHOP_ROUTE)
31 | } catch (e) {
> 32 | alert(e.response.data.message)
| ^ 33 | }
34 |
35 | }
вот сам auth.js
import React, {useContext, useState} from 'react';
import {Container, Form} from "react-bootstrap";
import Card from "react-bootstrap/Card";
import Button from "react-bootstrap/Button";
import Row from "react-bootstrap/Row";
import {NavLink, useLocation, useHistory} from "react-router-dom";
import {LOGIN_ROUTE, REGISTRATION_ROUTE, SHOP_ROUTE} from "../utils/consts";
import {login, registration} from "../http/userAPI";
import {observer} from "mobx-react-lite";
import {Context} from "../index";
const Auth = observer(() => {
const {user} = useContext(Context)
const location = useLocation()
const history = useHistory()
const isLogin = location.pathname === LOGIN_ROUTE
const [email, setEmail] = useState('')
const [password, setPassword] = useState('')
const click = async () => {
try {
let data;
if (isLogin) {
data = await login(email, password);
} else {
data = await registration(email, password);
}
user.setUser(user)
user.setIsAuth(true)
history.push(SHOP_ROUTE)
} catch (e) {
alert(e.response.data.message)
}
}
return (
<Container
className="d-flex justify-content-center align-items-center"
style={{height: window.innerHeight - 54}}
>
<Card style={{width: 600}} className="p-5">
<h2 className="m-auto">{isLogin ? 'Авторизация' : "Регистрация"}</h2>
<Form className="d-flex flex-column">
<Form.Control
className="mt-3"
placeholder="Введите ваш email..."
value={email}
onChange={e => setEmail(e.target.value)}
/>
<Form.Control
className="mt-3"
placeholder="Введите ваш пароль..."
value={password}
onChange={e => setPassword(e.target.value)}
type="password"
/>
<Row className="d-flex justify-content-between mt-3 pl-3 pr-3">
{isLogin ?
<div>
Нет аккаунта? <NavLink to={REGISTRATION_ROUTE}>Зарегистрируйся!</NavLink>
</div>
:
<div>
Есть аккаунт? <NavLink to={LOGIN_ROUTE}>Войдите!</NavLink>
</div>
}
<Button
variant={"outline-success"}
onClick={click}
>
{isLogin ? 'Войти' : 'Регистрация'}
</Button>
</Row>
</Form>
</Card>
</Container>
);
});
export default Auth;
вот еще userApi если хотите посмотреть на полный принцип работы
import {$authHost, $host} from "./index";
import jwt_decode from "jwt-decode";
export const registration = async (email, password) => {
const {data} = await $host.post('api/user/registration', {email, password, role: 'ADMIN'})
localStorage.setItem('token', data.token)
return jwt_decode(data.token)
}
export const login = async (email, password) => {
const {data} = await $host.post('api/user/login', {email, password})
localStorage.setItem('token', data.token)
return jwt_decode(data.token,)
}
export const check = async () => {
const {data} = await $authHost.get('api/user/auth' )
localStorage.setItem('token', data.token)
return jwt_decode(data.token)
}