aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/index.tsx23
-rw-r--r--src/pages/AuthPage/AuthPage.tsx6
-rw-r--r--src/pages/AuthPage/SignInForm.tsx22
3 files changed, 32 insertions, 19 deletions
diff --git a/src/index.tsx b/src/index.tsx
index 876491d..b9204b6 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -14,7 +14,7 @@ import ProfilePage from './pages/ProfilePage/ProfilePage';
import FeedPage from './pages/FeedPage/FeedPage';
import AuthPage from './pages/AuthPage/AuthPage';
import { User, Page } from './types';
-import { get } from './requests';
+import { get, post } from './requests';
const theme = createMuiTheme({
@@ -52,9 +52,26 @@ const App: React.FC = () => {
}
};
+ const logIn = (name: string, password: string) => {
+ post('/authentication', {
+ strategy: 'local',
+ name,
+ password
+ }).then(response => {
+ const user = response.data.undefined; // TODO: rename 'undefined' field
+ const { accessToken } = response.data;
+
+ setUser(user);
+ localStorage.setItem('userId', user._id);
+ localStorage.setItem('token', accessToken);
+ navigate('profile', user._id);
+ });
+ };
+
const logOut = () => {
- localStorage.removeItem('userId');
setUser(undefined);
+ localStorage.removeItem('userId');
+ localStorage.removeItem('token');
navigate('auth');
};
@@ -74,7 +91,7 @@ const App: React.FC = () => {
<div className={classes.root}>
{ page.prefix === 'profile' && <ProfilePage logOut={logOut} id={page.id} navigate={navigate} /> }
{ page.prefix === 'feed' && <FeedPage navigate={navigate} /> }
- { page.prefix === 'auth' && <AuthPage setUser={setUser} navigate={navigate} /> }
+ { page.prefix === 'auth' && <AuthPage logIn={logIn} navigate={navigate} /> }
</div>
</ThemeProvider>
);
diff --git a/src/pages/AuthPage/AuthPage.tsx b/src/pages/AuthPage/AuthPage.tsx
index 82d468d..b694c5d 100644
--- a/src/pages/AuthPage/AuthPage.tsx
+++ b/src/pages/AuthPage/AuthPage.tsx
@@ -3,12 +3,12 @@ import { User } from '../../types';
import SignInForm from './SignInForm';
interface PropTypes {
- setUser: (newUser: User | undefined) => void;
+ logIn: (name: string, password: string) => void;
navigate: (prefix: string, id: string) => void;
}
-const AuthPage: React.FC<PropTypes> = ({ setUser, navigate }) => {
- return <SignInForm setUser={setUser} navigate={navigate} />;
+const AuthPage: React.FC<PropTypes> = ({ logIn, navigate }) => {
+ return <SignInForm logIn={logIn} navigate={navigate} />;
};
export default AuthPage;
diff --git a/src/pages/AuthPage/SignInForm.tsx b/src/pages/AuthPage/SignInForm.tsx
index b7696e7..a83af57 100644
--- a/src/pages/AuthPage/SignInForm.tsx
+++ b/src/pages/AuthPage/SignInForm.tsx
@@ -6,7 +6,7 @@ import { User } from '../../types';
import { get } from '../../requests';
interface PropTypes {
- setUser: (newUser: User) => void;
+ logIn: (name: string, password: string) => void;
navigate: (prefix: string, id: string) => void;
}
@@ -23,27 +23,23 @@ const useStyles = makeStyles(theme => ({
}
}));
-const SignInForm: React.FC<PropTypes> = ({ setUser, navigate }) => {
+const SignInForm: React.FC<PropTypes> = ({ logIn, navigate }) => {
const classes = useStyles();
- const inputRef = useRef<HTMLInputElement>();
+ const nameRef = useRef<HTMLInputElement>();
+ const passwordRef = useRef<HTMLInputElement>();
const onClick = () => {
- const username = inputRef.current?.value;
- if (username) {
- get(`/users?name=${username}`).then(response => {
- const user = response.data[0];
- setUser(user);
- localStorage.setItem('userId', user._id);
- navigate('profile', user._id);
- });
- }
+ const name = nameRef.current?.value;
+ const password = passwordRef.current?.value;
+ if (name && password) logIn(name, password);
};
return (
<form className={classes.root} noValidate autoComplete="off">
<h1>Sign In</h1>
- <TextField inputRef={inputRef} id="standard-basic" label="Login" />
+ <TextField inputRef={nameRef} id="standard-basic" label="Login" />
<TextField
+ inputRef={passwordRef}
id="standard-password-input"
label="Password"
type="password"