diff --git a/server/.gitignore b/server/.gitignore index 4d29575de80483b005c29bfcac5061cd2f45313e..3c3629e647f5ddf82548912e337bea9826b434af 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -1,23 +1 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* +node_modules diff --git a/server/app.js b/server/app.js index b6d1a8b77f902b957c6d50bc005aeeba16255dd4..7da4ab1191b60af86e08afb4dfb33faedcb3f62d 100644 --- a/server/app.js +++ b/server/app.js @@ -3,18 +3,25 @@ const express = require('express'); const path = require('path'); const cookieParser = require('cookie-parser'); const logger = require('morgan'); -const port =3030; -require('dotenv').config(); const indexRouter = require('./routes/index'); const usersRouter = require('./routes/users'); +const loginRouter = require('./routes/login'); const connect = require('./schemas'); const app = express(); +const port = 3030; + +require('dotenv').config(); connect(); + app.listen(port, () => console.log(port)); +// view engine setup +// app.set('views', path.join(__dirname, 'views')); +// app.set('view engine', 'pug'); + app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); @@ -23,6 +30,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); +app.use('/login', loginRouter); app.listen(port, () => console.log(port)); @@ -39,7 +47,7 @@ app.use(function(err, req, res, next) { // render the error page res.status(err.status || 500); - res.render('error'); + // res.render('error'); }); module.exports = app; diff --git a/server/client/src/Components/Menu.js b/server/client/src/Components/Menu.js index 0c86c6b364938171723cbbadd6c66796029f08fc..d5e63c6465750513c683c06d4d2469ecb45a04d0 100644 --- a/server/client/src/Components/Menu.js +++ b/server/client/src/Components/Menu.js @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import { Link } from 'react-router-dom'; +import { Link, Redirect } from 'react-router-dom'; import styled from 'styled-components'; const Nav = styled.nav` @@ -7,13 +7,23 @@ const Nav = styled.nav` ` function Menu() { + const [state, setState] = useState() + + if (state) return ; + + function logout() { + localStorage.removeItem('token'); + alert("로그아웃 되었습니다."); + setState(true); + } + return ( ) diff --git a/server/client/src/Components/PrivateRoute.js b/server/client/src/Components/PrivateRoute.js new file mode 100644 index 0000000000000000000000000000000000000000..c5d8624a06e482b54abe786c7fdbd7778eb07458 --- /dev/null +++ b/server/client/src/Components/PrivateRoute.js @@ -0,0 +1,18 @@ +import React from 'react'; +import { Redirect, Route } from "react-router-dom"; + +export const PrivateRoute = ({ component: Component, ...rest }) => ( + + (localStorage.getItem("token") !==null) ? ( + + ) : ( + + ) + } + /> +) \ No newline at end of file diff --git a/server/client/src/Pages/HomePage.js b/server/client/src/Pages/HomePage.js index 584eb1605ae827556807b86b16121c647bf5de63..fcfe233e010278bd227bc205b9179d22c508e734 100644 --- a/server/client/src/Pages/HomePage.js +++ b/server/client/src/Pages/HomePage.js @@ -1,5 +1,6 @@ import React, { useState, useEffect } from 'react'; import Menu from '../Components/Menu'; +import { Link, Redirect } from 'react-router-dom'; function Home() { return ( @@ -7,6 +8,8 @@ function Home() {
home + +
) diff --git a/server/client/src/Pages/LoginPage.js b/server/client/src/Pages/LoginPage.js index b11c542d66d58a826fa7cef1834189d096a875f7..2c6f7ff0ccbc320c4adb92ffa6d6fc7740eb64b5 100644 --- a/server/client/src/Pages/LoginPage.js +++ b/server/client/src/Pages/LoginPage.js @@ -1,8 +1,10 @@ -import React, { } from 'react'; +import React, { useState } from 'react'; import styled from 'styled-components'; -import { Link } from 'react-router-dom'; +import { Link, Redirect } from 'react-router-dom'; import { Formik } from 'formik'; import * as Yup from 'yup'; +import axios from 'axios'; +import 'bootstrap/dist/css/bootstrap.css'; const Log = styled.div` background-color: #981e1e; @@ -13,6 +15,11 @@ const Logo = styled.div` function Login() { + const [state, setState]= useState(false); + + if (state) { + return ; + } return (
@@ -22,31 +29,30 @@ function Login() { { - // axios({ - // method: 'post', - // url: '/login', - // data: values, - // }).then(res => { - // if (res.status === 404) return alert(res.data.error) + axios({ + method: 'post', + url: '/login', + data: values, + }).then(res => { + if (res.status === 404) return alert(res.data.error) alert("로그인이 완료되었습니다!") - // localStorage.setItem('token', res.data.token); - // localStorage.setItem('id', res.data.users._id); - // setState(true); - // }) - // .catch(err => { - // alert(err.error) - // }); + localStorage.setItem('token', res.data.token); + localStorage.setItem('id', res.data.users._id); + setState(true); + }) + .catch(err => { + alert(err.error) + }); setTimeout(() => { setSubmitting(false); @@ -64,14 +70,14 @@ function Login() {
- {touched.email && errors.email ? ( -
{errors.email}
+ {touched.id && errors.id ? ( +
{errors.id}
) : null}
@@ -88,9 +94,9 @@ function Login() {
- + + +
비밀번호를 잊으셨나요?
회원이 아니신가요? diff --git a/server/client/src/Pages/SignupPage.js b/server/client/src/Pages/SignupPage.js index ff1ab2d664056ee985ad7d16c463fe7e15de6218..a28345c0f703fd09c2cc7db8e9015d2201e84f7c 100644 --- a/server/client/src/Pages/SignupPage.js +++ b/server/client/src/Pages/SignupPage.js @@ -6,22 +6,21 @@ import 'bootstrap/dist/css/bootstrap.css'; import { Link, Redirect } from 'react-router-dom'; function Signup() { - // const [state, setState] = useState(false); + const [state, setState] = useState(false); - // if (state) { - // return ; - // } + if (state) { + return ; + } return (
{ - // axios({ - // method: 'post', - // url: '/users', - // data: values, - // }).then(res => { - // if (res.status === 404) return alert(res.data.error) + axios({ + method: 'post', + url: '/users', + data: values, + }).then(res => { + if (res.status === 404) return alert(res.data.error) alert("회원가입이 완료되었습니다!") - // setState(true); - // }) - // .catch(err => { - // alert(err.error) - // }); + setState(true); + }) + .catch(err => { + alert(err.error) + }); setTimeout(() => { setSubmitting(false); @@ -74,25 +71,14 @@ function Signup() {
- {touched.email && errors.email ? ( -
{errors.email}
- ) : null} -
-
- - {touched.address && errors.address ? ( -
{errors.address}
+ {touched.id && errors.id ? ( +
{errors.id}
) : null}
@@ -121,9 +107,9 @@ function Signup() {
- + + +
)} diff --git a/server/client/src/index.js b/server/client/src/index.js index 66965cbff668716e3b81bde4e81b57c1817ea469..f960b5a2b1367373f41f3c27ece323966e01b87a 100644 --- a/server/client/src/index.js +++ b/server/client/src/index.js @@ -4,6 +4,8 @@ import * as serviceWorker from './serviceWorker'; import { BrowserRouter as Router, Route, Redirect, Switch } from 'react-router-dom'; import 'bootstrap'; import 'bootstrap/dist/css/bootstrap.css'; +import axios from 'axios'; +import { PrivateRoute } from './Components/PrivateRoute'; import Login from './Pages/LoginPage'; import Home from './Pages/HomePage'; @@ -12,15 +14,22 @@ import Apply from './Pages/ApplyPage'; import Check from './Pages/CheckPage'; import Notice from './Pages/NoticePage'; +axios.defaults.validateStatus = function (status) { + return status < 500; // default +} + ReactDOM.render( - + + + + , document.getElementById('root') diff --git a/server/package-lock.json b/server/package-lock.json index cffd89762217ce01bb51a631b7d05c5acc664cc7..74245d37a3b088296945b9f0e5ab9153edeb495f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -4,7 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { -<<<<<<< HEAD "@types/babel-types": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", @@ -18,14 +17,11 @@ "@types/babel-types": "*" } }, -======= ->>>>>>> origin/NewMaster "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, -<<<<<<< HEAD "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -70,8 +66,6 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, -======= ->>>>>>> origin/NewMaster "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -91,7 +85,6 @@ "readable-stream": "^2.0.6" } }, -<<<<<<< HEAD "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -127,14 +120,11 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, -======= ->>>>>>> origin/NewMaster "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, -<<<<<<< HEAD "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -150,8 +140,6 @@ } } }, -======= ->>>>>>> origin/NewMaster "bcrypt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", @@ -175,7 +163,6 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, -<<<<<<< HEAD "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -203,8 +190,6 @@ } } }, -======= ->>>>>>> origin/NewMaster "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -219,7 +204,11 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.5.tgz", "integrity": "sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg==" }, -<<<<<<< HEAD + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -246,19 +235,12 @@ "requires": { "is-regex": "^1.0.3" } -======= - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" ->>>>>>> origin/NewMaster }, "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, -<<<<<<< HEAD "clean-css": { "version": "3.4.28", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", @@ -278,14 +260,11 @@ "wordwrap": "0.0.2" } }, -======= ->>>>>>> origin/NewMaster "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, -<<<<<<< HEAD "commander": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", @@ -294,8 +273,6 @@ "graceful-readlink": ">= 1.0.0" } }, -======= ->>>>>>> origin/NewMaster "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -306,7 +283,6 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, -<<<<<<< HEAD "constantinople": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", @@ -352,14 +328,11 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, -======= ->>>>>>> origin/NewMaster "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, -<<<<<<< HEAD "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -380,8 +353,6 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, -======= ->>>>>>> origin/NewMaster "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -397,7 +368,6 @@ "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" }, -<<<<<<< HEAD "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -408,27 +378,29 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, -======= ->>>>>>> origin/NewMaster "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, -<<<<<<< HEAD "doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, -======= ->>>>>>> origin/NewMaster "dotenv": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" }, -<<<<<<< HEAD + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -527,16 +499,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, -======= - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, ->>>>>>> origin/NewMaster "fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", @@ -578,7 +540,6 @@ "path-is-absolute": "^1.0.0" } }, -<<<<<<< HEAD "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", @@ -589,14 +550,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" }, -======= ->>>>>>> origin/NewMaster "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, -<<<<<<< HEAD "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -615,8 +573,6 @@ } } }, -======= ->>>>>>> origin/NewMaster "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -652,7 +608,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, -<<<<<<< HEAD "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -679,8 +634,6 @@ } } }, -======= ->>>>>>> origin/NewMaster "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -689,7 +642,6 @@ "number-is-nan": "^1.0.0" } }, -<<<<<<< HEAD "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -703,27 +655,16 @@ "has-symbols": "^1.0.1" } }, -======= ->>>>>>> origin/NewMaster "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, -<<<<<<< HEAD "js-stringify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" }, - "jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", - "requires": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" -======= "jsonwebtoken": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", @@ -741,6 +682,15 @@ "semver": "^5.6.0" } }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -758,7 +708,6 @@ "requires": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" ->>>>>>> origin/NewMaster } }, "kareem": { @@ -766,7 +715,6 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz", "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==" }, -<<<<<<< HEAD "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -785,16 +733,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" -======= "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -829,7 +767,16 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" ->>>>>>> origin/NewMaster + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "memory-pager": { "version": "1.5.0", @@ -837,7 +784,6 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "optional": true }, -<<<<<<< HEAD "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -866,8 +812,6 @@ "mime-db": "1.44.0" } }, -======= ->>>>>>> origin/NewMaster "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -942,7 +886,6 @@ "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" }, -<<<<<<< HEAD "morgan": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", @@ -955,8 +898,6 @@ "on-headers": "~1.0.1" } }, -======= ->>>>>>> origin/NewMaster "mpath": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.7.0.tgz", @@ -1019,14 +960,11 @@ } } }, -<<<<<<< HEAD "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, -======= ->>>>>>> origin/NewMaster "node-addon-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz", @@ -1102,7 +1040,6 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, -<<<<<<< HEAD "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1116,8 +1053,6 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, -======= ->>>>>>> origin/NewMaster "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1145,20 +1080,16 @@ "os-tmpdir": "^1.0.0" } }, -<<<<<<< HEAD "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, -======= ->>>>>>> origin/NewMaster "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, -<<<<<<< HEAD "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", @@ -1169,14 +1100,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, -======= ->>>>>>> origin/NewMaster "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, -<<<<<<< HEAD "promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", @@ -1339,8 +1267,6 @@ } } }, -======= ->>>>>>> origin/NewMaster "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -1373,27 +1299,21 @@ } } }, -<<<<<<< HEAD "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, -======= ->>>>>>> origin/NewMaster "regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, -<<<<<<< HEAD "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, -======= ->>>>>>> origin/NewMaster "require_optional": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", @@ -1403,7 +1323,6 @@ "semver": "^5.1.0" } }, -<<<<<<< HEAD "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -1412,14 +1331,11 @@ "path-parse": "^1.0.6" } }, -======= ->>>>>>> origin/NewMaster "resolve-from": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" }, -<<<<<<< HEAD "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", @@ -1428,8 +1344,6 @@ "align-text": "^0.1.1" } }, -======= ->>>>>>> origin/NewMaster "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -1467,7 +1381,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, -<<<<<<< HEAD "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -1506,21 +1419,16 @@ "send": "0.16.2" } }, -======= ->>>>>>> origin/NewMaster "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, -<<<<<<< HEAD "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, -======= ->>>>>>> origin/NewMaster "sift": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", @@ -1536,7 +1444,6 @@ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, -<<<<<<< HEAD "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -1545,8 +1452,6 @@ "amdefine": ">=0.0.4" } }, -======= ->>>>>>> origin/NewMaster "sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -1556,14 +1461,11 @@ "memory-pager": "^1.0.2" } }, -<<<<<<< HEAD "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, -======= ->>>>>>> origin/NewMaster "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -1616,7 +1518,6 @@ "yallist": "^3.0.3" } }, -<<<<<<< HEAD "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -1664,14 +1565,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, -======= ->>>>>>> origin/NewMaster "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, -<<<<<<< HEAD "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1687,8 +1585,6 @@ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, -======= ->>>>>>> origin/NewMaster "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -1697,7 +1593,6 @@ "string-width": "^1.0.2 || 2" } }, -<<<<<<< HEAD "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", @@ -1717,8 +1612,6 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, -======= ->>>>>>> origin/NewMaster "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -1728,7 +1621,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" -<<<<<<< HEAD }, "yargs": { "version": "3.10.0", @@ -1740,8 +1632,9 @@ "decamelize": "^1.0.0", "window-size": "0.1.0" } -======= ->>>>>>> origin/NewMaster } } } + + + \ No newline at end of file diff --git a/server/package.json b/server/package.json index 7ab083d2fcdb0dbda6a7b6822c6c8901cd113762..ee73d0d4036389609a59e8b81a71c9fb8d135824 100644 --- a/server/package.json +++ b/server/package.json @@ -18,3 +18,4 @@ "pug": "2.0.0-beta11" } } + diff --git a/server/routes/index.js b/server/routes/index.js index ecca96a56b309a315ddf6399155fd2f953031d3b..c1b8c3e03fe77e455e6d7aaefc1658be362b9cce 100644 --- a/server/routes/index.js +++ b/server/routes/index.js @@ -1,9 +1,11 @@ -var express = require('express'); -var router = express.Router(); +const express = require('express'); +const User = require('../schemas/user'); + +const router = express.Router(); /* GET home page. */ -router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); -}); +// router.get('/', function(req, res, next) { +// res.render('index', { title: 'Express' }); +// }); module.exports = router; diff --git a/server/routes/login.js b/server/routes/login.js new file mode 100644 index 0000000000000000000000000000000000000000..8cc9fd0ce8115cb82c4a63070fc40a9b0edcf949 --- /dev/null +++ b/server/routes/login.js @@ -0,0 +1,52 @@ +const express = require('express'); +const User = require('../schemas/user'); +const bcrypt = require("bcrypt"); +const jwt = require('jsonwebtoken'); + +const router = express.Router(); + +router.get('/', function (req, res, next) { + console.log('/login get request', req.body) + User.find({}) + .then((signups) => { + res.json(signups); + }) + .catch((err) => { + console.error(err); + next(err); + }); +}); + +router.post('/', function (req, res, next) { + console.log('/login post request', req.body) + User.findOne({ id: req.body.id }, 'id password', function (err, users) { + if (err) return res.status(500).json({ error: err }); + + if (!users) { + return res.status(404).json({ error: '해당 아이디가 존재하지 않습니다.' }); + } + + bcrypt.compare(req.body.password, users.password, function (err, result) { + if (err) { + console.log(err) + return res.status(500).json({ error: err }); + } + + if (result) { + const token = jwt.sign({ + id:users.id, + }, process.env.JWT_SECRET, { + expiresIn: '1m', + }); + return res.status(201).json({ + token, + users, + }); + } + res.status(404).json({ error: '비밀번호를 다시 입력해주세요.' }); + }); + + }) +}); + +module.exports = router; diff --git a/server/routes/middlewares.js b/server/routes/middlewares.js new file mode 100644 index 0000000000000000000000000000000000000000..81c6dc1bd22f6ac4f546d140d8740644be26d6b1 --- /dev/null +++ b/server/routes/middlewares.js @@ -0,0 +1,36 @@ +const jwt = require('jsonwebtoken'); + +exports.isLoggedIn = (req, res, next) => { + if (req.isAuthenticated()) { + next(); + } else { + res.status(403).send('로그인 필요'); + } +}; + +exports.isNotLoggedIn = (req, res, next) => { + if (!req.isAuthenticated()) { + next(); + } else { + res.redirect('/'); + } +}; + +exports.verifyToken = (req, res, next) => { + try { + req.decoded = jwt.verify(req.headers.authorization, process.env.JWT_SECRET); + console.log('decode', req.decoded) + return next(); + } catch (error) { + if (error.name === 'TokenExpiredError') { // 유효기간 초과 + return res.status(419).json({ + code: 419, + error: '토큰이 만료되었습니다. 다시 로그인 해주세요.', + }); + } + return res.status(401).json({ + code: 401, + error: '유효하지 않은 토큰입니다. 다시 로그인 해주세요.', + }); + } +}; diff --git a/server/routes/users.js b/server/routes/users.js index 623e4302bee32ccc080d1c83ee2e55a426c9bac8..fd136181fc40fbdf3f1a8a4da031f0e045ca1faa 100644 --- a/server/routes/users.js +++ b/server/routes/users.js @@ -1,9 +1,34 @@ -var express = require('express'); -var router = express.Router(); +const express = require('express'); +const User = require('../schemas/user'); +const bcrypt = require("bcrypt"); +const { verifyToken } = require('./middlewares'); -/* GET users listing. */ -router.get('/', function(req, res, next) { - res.send('respond with a resource'); -}); +const router = express.Router(); + +router.post('/', function (req, res, next) { + console.log('/users post req.body', req.body) + User.findOne({ id: req.body.id }, function (err, users) { + if (err) return res.status(500).json({ error: err }); + + if (users) { + return res.status(404).json({ error: '이미 존재하는 아이디입니다.' }) + }; + const user = new User({ + name: req.body.name, + id: req.body.id, + password: req.body.password, + }); + + user.save() + .then((result) => { + console.log(result); + res.status(201).json(result); + }) + .catch((err) => { + console.error(err); + next(err); + }); + }) +}); module.exports = router; diff --git a/server/schemas/index.js b/server/schemas/index.js index a36c287c9803332f94321fa88439c8e5dfec3c4f..848acb8da5d842e50e8f92aac5b957ed09f1d271 100644 --- a/server/schemas/index.js +++ b/server/schemas/index.js @@ -6,7 +6,7 @@ module.exports = () => { mongoose.set('debug', true); } mongoose.connect('mongodb://rkyoung7:rkdud127@localhost:27017/admin', { - dbName: 'KU_Rental', + dbName: 'ku_rental', useNewUrlParser: true, useUnifiedTopology: true, }, (error) => { if (error) { console.log('몽고디비 연결 에러', error); @@ -20,10 +20,10 @@ module.exports = () => { console.error('몽고디비 연결 에러', error); }); mongoose.connection.on('disconnected', () => { - console.error('몽고디비 연결이 끊겼습니다. 연결을재시도합니다.'); + console.error('몽고디비 연결이 끊겼습니다. 연결을 재시도합니다.'); connect(); }); + require('./user'); require('./reserve'); - };