diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/index.tsx | 23 | ||||
-rw-r--r-- | src/pages/AuthPage/AuthPage.tsx | 6 | ||||
-rw-r--r-- | src/pages/AuthPage/SignInForm.tsx | 22 |
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" |