Added authorization
This commit is contained in:
parent
7066d0f233
commit
a0dbd1eca8
@ -54,7 +54,7 @@ const Login: React.FC = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<form onSubmit={handleSubmit(resetError, setUserState, gotError, router)}>
|
<form onSubmit={handleSubmit(resetError, setUserState, gotError, router)}>
|
||||||
<input type="email" name="email" id="email" />
|
<input type="username" name="username" id="username" />
|
||||||
<input type="password" name="password" id="password" autoComplete="on" />
|
<input type="password" name="password" id="password" autoComplete="on" />
|
||||||
<input type="submit" />
|
<input type="submit" />
|
||||||
{error.has ? <ErrorMessage message={error.message} /> : ""}
|
{error.has ? <ErrorMessage message={error.message} /> : ""}
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
|
|
||||||
import { IRouteCard } from "types/user";
|
import { IRouteCard } from "types/user";
|
||||||
import { formatTimeLength } from "utils";
|
|
||||||
|
|
||||||
const RouteCard: React.FC<IRouteCard> = ({ route }) => {
|
const RouteCard: React.FC<IRouteCard> = ({ route }) => {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<h2>{route.name}</h2>
|
<h3>{route.name}</h3>
|
||||||
<p>
|
<p>{route.description}</p>
|
||||||
Данный квесты вы сможете пройти за {formatTimeLength(route.averageTime)}
|
|
||||||
</p>
|
|
||||||
<p>Длинна маршрута: {route.length} м</p>
|
<p>Длинна маршрута: {route.length} м</p>
|
||||||
<p>Примерное время прохождения: {route.averageTime}</p>
|
<p>Примерное время прохождения: {route.averageTime}</p>
|
||||||
<p>Точка старта:</p>
|
<p>Точка старта:</p>
|
||||||
|
@ -7,7 +7,7 @@ import styles from "styles/RouteView.module.css";
|
|||||||
const RouteView: React.FC<IRouteView> = ({ header, routes }) => {
|
const RouteView: React.FC<IRouteView> = ({ header, routes }) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<h1 className={styles.header}>{header}</h1>
|
<h2 className={styles.header}>{header}</h2>
|
||||||
{routes.map((route) => (
|
{routes.map((route) => (
|
||||||
<RouteCard key={route.id} route={route} />
|
<RouteCard key={route.id} route={route} />
|
||||||
))}
|
))}
|
||||||
|
22
front/pages/activate.tsx
Normal file
22
front/pages/activate.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { request } from "utils/index";
|
||||||
|
import React, { useEffect } from "react";
|
||||||
|
import { useRouter } from "next/router";
|
||||||
|
import { redirect } from "next/dist/next-server/server/api-utils";
|
||||||
|
|
||||||
|
const Activate: React.FC = () => {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
(async () => {
|
||||||
|
const res = await request(
|
||||||
|
`activate/${router.query.uidb}/${router.query.token}`,
|
||||||
|
"POST"
|
||||||
|
);
|
||||||
|
|
||||||
|
router.push("/");
|
||||||
|
})();
|
||||||
|
});
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Activate;
|
@ -1,6 +1,5 @@
|
|||||||
import React, { useContext, useEffect, useState } from "react";
|
import React, { useContext, useEffect, useState } from "react";
|
||||||
|
|
||||||
import HomeLayout from "layouts/HomeLayout";
|
|
||||||
import styles from "styles/home.module.css";
|
import styles from "styles/home.module.css";
|
||||||
import { HomeRefContext } from "context/ref";
|
import { HomeRefContext } from "context/ref";
|
||||||
import Register from "components/Register";
|
import Register from "components/Register";
|
||||||
@ -28,7 +27,7 @@ const advantagesList = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const Home: React.FC & { Layout: React.ReactNode } = () => {
|
const Home: React.FC = () => {
|
||||||
const { setLoading } = useContext(LoadingContext);
|
const { setLoading } = useContext(LoadingContext);
|
||||||
const { userState } = useContext(UserContext);
|
const { userState } = useContext(UserContext);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@ -37,7 +36,8 @@ const Home: React.FC & { Layout: React.ReactNode } = () => {
|
|||||||
if (userState) {
|
if (userState) {
|
||||||
router.push("/user");
|
router.push("/user");
|
||||||
return null;
|
return null;
|
||||||
} else setLoading(false);
|
}
|
||||||
|
else setLoading(false);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const scrollRef = useContext(HomeRefContext);
|
const scrollRef = useContext(HomeRefContext);
|
||||||
@ -80,6 +80,4 @@ const Home: React.FC & { Layout: React.ReactNode } = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
Home.Layout = HomeLayout;
|
|
||||||
|
|
||||||
export default Home;
|
export default Home;
|
||||||
|
@ -10,6 +10,8 @@ const routes: RouteT[] = [
|
|||||||
name: "Пешком",
|
name: "Пешком",
|
||||||
length: 100,
|
length: 100,
|
||||||
averageTime: 100,
|
averageTime: 100,
|
||||||
|
description:
|
||||||
|
"Ipsum do irure ut excepteur reprehenderit nulla proident cupidatat ullamco officia pariatur enim consequat.",
|
||||||
startCoordinates: {
|
startCoordinates: {
|
||||||
latitude: 60.977313,
|
latitude: 60.977313,
|
||||||
longitude: 69.039326,
|
longitude: 69.039326,
|
||||||
|
0
front/styles/RouteCard.module.css
Normal file
0
front/styles/RouteCard.module.css
Normal file
@ -1,5 +1,3 @@
|
|||||||
.header {
|
.header {
|
||||||
border-radius: 30px;
|
|
||||||
background: #cff9ec;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ type FCL = React.FC & { Layout: React.ReactNode };
|
|||||||
type RouteT = {
|
type RouteT = {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
|
description: string;
|
||||||
length: number;
|
length: number;
|
||||||
averageTime?: number;
|
averageTime?: number;
|
||||||
userTime?: number;
|
userTime?: number;
|
||||||
|
@ -2,24 +2,28 @@ const formatTimeLength = (minutes: number) =>
|
|||||||
(Math.floor(minutes / 60) > 0 ? `${Math.floor(minutes / 60)} ч. ` : "") +
|
(Math.floor(minutes / 60) > 0 ? `${Math.floor(minutes / 60)} ч. ` : "") +
|
||||||
(minutes % 60 > 0 ? `${minutes % 60} мин.` : "");
|
(minutes % 60 > 0 ? `${minutes % 60} мин.` : "");
|
||||||
|
|
||||||
const request = async (uri: string, method: "POST" | "GET", body = null) => {
|
const request = async (uri: string, method: "POST" | "GET", body?) => {
|
||||||
const url = "http://localhost:4000/api/" + uri;
|
const token = localStorage.getItem("token");
|
||||||
|
|
||||||
|
const url = "http://80.240.25.179/api/" + uri;
|
||||||
|
|
||||||
const headers = {
|
const headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
method,
|
Authorization: token != "" ? `Token ${token}` : undefined,
|
||||||
body: method == "POST" ? body : undefined,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
headers,
|
headers,
|
||||||
body: method == "GET" ? body : undefined,
|
method,
|
||||||
|
body: JSON.stringify(body),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(uri);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (process.env.NODE_ENV == "development") {
|
// if (process.env.NODE_ENV == "development") {
|
||||||
return JSON.parse(`{ "token": "fhjighdfjgjdfigbvhbsdfuyt47" }`);
|
// return JSON.parse(`{ "token": "fhjighdfjgjdfigbvhbsdfuyt47" }`);
|
||||||
}
|
// }
|
||||||
const res = await fetch(url, options);
|
const res = await fetch(url, options);
|
||||||
return await res.json();
|
return await res.json();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user