Showing
2 changed files
with
118 additions
and
114 deletions
1 | import React, { useState } from 'react'; | 1 | import React, { useState } from 'react'; |
2 | import { Button, Form, FormGroup, Label, Input} from 'reactstrap'; | 2 | import { Button, Form, FormGroup, Label, Input} from 'reactstrap'; |
3 | -import {FacebookLoginButton} from 'react-social-login-buttons'; | 3 | +import { FacebookLoginButton } from 'react-social-login-buttons'; |
4 | - | ||
5 | - | ||
6 | 4 | ||
7 | const SigninPage = (props) => { | 5 | const SigninPage = (props) => { |
8 | 6 | ||
9 | -// const [userName, setUserName] = useState(''); | 7 | + const [userName, setUserName] = useState(''); |
10 | -// const [userPw, setuserPw] = useState(''); | 8 | + const [userPw, setUserPw] = useState(''); |
9 | + | ||
10 | + const signinApi = (user) => { | ||
11 | + return fetch('/api/signin', { | ||
12 | + method: 'POST', | ||
13 | + headers: { | ||
14 | + 'Content-Type': 'application/json' | ||
15 | + }, | ||
16 | + body: JSON.stringify(user) | ||
17 | + }).then(response => response.json()) | ||
18 | + } | ||
19 | + | ||
20 | + const handleSubmit = async (e) => { | ||
21 | + e.preventDefault(); | ||
22 | + if (!userName || !userPw) { | ||
23 | + return; | ||
24 | + } | ||
25 | + try { | ||
26 | + const response = await signinApi({ | ||
27 | + username: userName, | ||
28 | + password: userPw | ||
29 | + }); | ||
30 | + | ||
31 | + if (response.message === "Token issue") { | ||
32 | + localStorage.setItem("user_token", JSON.stringify(response.token)); | ||
33 | + alert('Login success'); | ||
34 | + props.history.push('/'); | ||
35 | + } else if(response.message === "user does not exist"){ | ||
36 | + alert('User does not exist'); | ||
37 | + props.history.push('/signin'); | ||
38 | + setUserName(''); | ||
39 | + setUserPw(''); | ||
40 | + } else if(response.message === "invalid password") { | ||
41 | + alert('Invalid Password'); | ||
42 | + props.history.push('/signin'); | ||
43 | + setUserName(''); | ||
44 | + setUserPw(''); | ||
45 | + } else if(response.message === "server error") { | ||
46 | + alert('Server Error'); | ||
47 | + props.history.push('/signin'); | ||
48 | + setUserName(''); | ||
49 | + setUserPw(''); | ||
50 | + } | ||
51 | + } catch (err) { | ||
52 | + alert('Signin Failed'); | ||
53 | + setUserName(''); | ||
54 | + setUserPw(''); | ||
55 | + props.history.push('/signin'); | ||
56 | + } | ||
57 | + }; | ||
58 | + | ||
59 | + const onChangeUsername = (e) => { | ||
60 | + setUserName(e.target.value); | ||
61 | + }; | ||
62 | + | ||
63 | + const onChangePassword = (e) => { | ||
64 | + setUserPw(e.target.value); | ||
65 | + }; | ||
11 | 66 | ||
12 | -// const signinApi = (user) => { | ||
13 | -// return fetch('/api/signin', { | ||
14 | -// method: 'POST', | ||
15 | -// headers: { | ||
16 | -// 'Content-Type': 'application/json' | ||
17 | -// }, | ||
18 | -// body: JSON.stringify(user) | ||
19 | -// }).then(response => response.json()) | ||
20 | -// } | ||
21 | 67 | ||
22 | -// const handleSubmit = async (e) => { | ||
23 | -// e.preventDefault(); | ||
24 | -// if (!userId || !userPw) { | ||
25 | -// return; | ||
26 | -// } | ||
27 | -// try { | ||
28 | -// const response = await loginApi({ | ||
29 | -// user_id: userId, | ||
30 | -// user_pw: userPw | ||
31 | -// }); | ||
32 | 68 | ||
33 | -// if (response.result === 'ok') { | ||
34 | -// setToken(); | ||
35 | -// } else { | ||
36 | -// throw new Error(response.error); | ||
37 | -// } | ||
38 | -// } catch (err) { | ||
39 | -// alert('로그인에 실패했습니다.'); | ||
40 | -// setUserId(''); | ||
41 | -// setUserPw(''); | ||
42 | -// console.error('login error', err); | ||
43 | -// } | ||
44 | -// }; | ||
45 | -// }; | ||
46 | return ( | 69 | return ( |
47 | <> | 70 | <> |
48 | <Form style={{ | 71 | <Form style={{ |
... | @@ -60,14 +83,14 @@ const SigninPage = (props) => { | ... | @@ -60,14 +83,14 @@ const SigninPage = (props) => { |
60 | <h2 className="text-center"><br/>Sign In</h2> | 83 | <h2 className="text-center"><br/>Sign In</h2> |
61 | <FormGroup> | 84 | <FormGroup> |
62 | <Label>Username</Label> | 85 | <Label>Username</Label> |
63 | - <Input required="required" type="name" placeholder="Enter your name"></Input> | 86 | + <Input required="required" value={userName} onChange={onChangeUsername} type="name" placeholder="Enter your name" ></Input> |
64 | </FormGroup> | 87 | </FormGroup> |
65 | <FormGroup> | 88 | <FormGroup> |
66 | <Label>Password</Label> | 89 | <Label>Password</Label> |
67 | - <Input required="required" type="password" placeholder="Enter your password"></Input> | 90 | + <Input required="required" type="password" value={userPw} onChange={onChangePassword} placeholder="Enter your password"></Input> |
68 | </FormGroup> | 91 | </FormGroup> |
69 | <FormGroup> | 92 | <FormGroup> |
70 | - <Button className="btn-lg btn-dark btn-block">Sign in</Button> | 93 | + <Button type="submit" onClick={handleSubmit} className="btn-lg btn-dark btn-block">Sign in</Button> |
71 | </FormGroup> | 94 | </FormGroup> |
72 | <div className="text-center pt-3"> | 95 | <div className="text-center pt-3"> |
73 | Or continue with your social account | 96 | Or continue with your social account |
... | @@ -80,6 +103,6 @@ const SigninPage = (props) => { | ... | @@ -80,6 +103,6 @@ const SigninPage = (props) => { |
80 | 103 | ||
81 | </> | 104 | </> |
82 | ); | 105 | ); |
83 | -} | ||
84 | 106 | ||
107 | +}; | ||
85 | export default SigninPage; | 108 | export default SigninPage; |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -77,85 +77,66 @@ app.post("/api/signup", (req, res) => { | ... | @@ -77,85 +77,66 @@ app.post("/api/signup", (req, res) => { |
77 | // jwt_secret_key.value | 77 | // jwt_secret_key.value |
78 | // signin | 78 | // signin |
79 | app.post("/api/signin", (req, res) => { | 79 | app.post("/api/signin", (req, res) => { |
80 | - // ???? | 80 | + |
81 | -// res.send('aa'); | ||
82 | const name = req.body.username; | 81 | const name = req.body.username; |
83 | let sql = `SELECT name, pw FROM USER WHERE name='${req.body.username}';`; | 82 | let sql = `SELECT name, pw FROM USER WHERE name='${req.body.username}';`; |
84 | - | 83 | + let sql_usercheck = `SELECT * FROM USER WHERE name='${req.body.username}';`; |
85 | - connection.query(sql, (err, rows, fields) => { | 84 | + |
86 | - | 85 | + connection.query(sql_usercheck, (err, rows, fields) => { |
87 | - if (!rows) { | 86 | + if(rows.length === 0) { |
88 | - res.send({ | 87 | + flag = false; |
89 | - code: 400, | 88 | + // console.log(flag); |
90 | - message: "failed", | 89 | + return res.send({ |
91 | - }); | 90 | + code: 400, |
92 | - return ; | 91 | + message: "user does not exist", |
93 | - } | 92 | + }); |
94 | - | 93 | + } else { |
95 | - else{ | 94 | + |
96 | - | 95 | + connection.query(sql, (err, rows, fields) => { |
97 | - bcrypt.compare(req.body.password, rows[0].pw, function (err, result){ | 96 | + bcrypt.compare(req.body.password, rows[0].pw, function (err, result){ |
98 | - const pw = rows[0].pw; | 97 | + const pw = rows[0].pw; |
99 | - if(result) { | 98 | + if(result) { |
100 | - | ||
101 | - try { | ||
102 | - // jwt.sign() ???: ?? ?? | ||
103 | - const token = jwt.sign( | ||
104 | - { | ||
105 | - name, | ||
106 | - pw, | ||
107 | - }, | ||
108 | - jwt_secret_key.value, | ||
109 | - { | ||
110 | - expiresIn: "60m", // 60? | ||
111 | - issuer: "admin", | ||
112 | - } | ||
113 | - ); | ||
114 | 99 | ||
115 | - return res.json({ | 100 | + try { |
116 | - code: 200, | 101 | + const token = jwt.sign( |
117 | - message: '??? ???????.', | 102 | + { |
118 | - token, | 103 | + name, |
119 | - }); | 104 | + pw, |
120 | - | 105 | + }, |
121 | - } catch (error) { | 106 | + jwt_secret_key.value, |
122 | - console.error(error); | 107 | + { |
123 | - return res.status(500).json({ | 108 | + expiresIn: "60m", |
124 | - code: 500, | 109 | + issuer: "admin", |
125 | - message: '?? ??', | ||
126 | - }); | ||
127 | } | 110 | } |
128 | - | 111 | + ); |
129 | - } else { | 112 | + |
130 | - res.send({ | 113 | + return res.json({ |
131 | - code: 400, | 114 | + code: 200, |
132 | - message: "failed", | 115 | + message: 'Token issue', |
133 | - }); | 116 | + token, |
134 | - } | 117 | + }); |
135 | - }) | 118 | + |
136 | - } | 119 | + } catch (error) { |
120 | + console.error(error); | ||
121 | + return res.status(500).json({ | ||
122 | + code: 500, | ||
123 | + message: 'server error', | ||
124 | + }); | ||
125 | + | ||
126 | + } | ||
127 | + | ||
128 | + } else { | ||
129 | + return res.json({ | ||
130 | + code: 400, | ||
131 | + message: "invalid password", | ||
132 | + }); | ||
133 | + } | ||
134 | + }) | ||
135 | + | ||
137 | }) | 136 | }) |
137 | + } | ||
138 | + }) | ||
138 | }); | 139 | }); |
139 | -// else { | ||
140 | -// bcrypt.compare(req.body.password, rows[0].pw, function (err, res) { | ||
141 | -// console.log(res); | ||
142 | -// if(!res) { | ||
143 | -// res.send({ | ||
144 | -// code: 400, | ||
145 | -// message: "failed", | ||
146 | -// }); | ||
147 | -// } | ||
148 | -// else { | ||
149 | -// // ???? ??? ? | ||
150 | -// const pw = rows[0].pw; | ||
151 | - | ||
152 | -// } | ||
153 | -// }); | ||
154 | - | ||
155 | -// } | ||
156 | - | ||
157 | -// }); | ||
158 | - | ||
159 | 140 | ||
160 | 141 | ||
161 | app.listen(port, () => console.log(`Listening on port ${port}`)); | 142 | app.listen(port, () => console.log(`Listening on port ${port}`)); | ... | ... |
-
Please register or login to post a comment