Skip to content
Snippets Groups Projects
Commit 9126155d authored by epson220's avatar epson220
Browse files

리엑트에서 노드로 요청 안옴....

parent 8a467380
No related branches found
No related tags found
No related merge requests found
require("dotenv").config();
var createError = require("http-errors");
var express = require("express");
var path = require("path");
......@@ -6,6 +5,8 @@ var cookieParser = require("cookie-parser");
var logger = require("morgan");
var passport = require("passport");
var flash = require("connect-flash");
var expressSession = require("express-session");
var bodyParser = require("body-parser");
const mongoose = require("mongoose");
const mongooseAutoInc = require("mongoose-auto-increment");
......@@ -22,7 +23,8 @@ mongooseAutoInc.initialize(mongoose.connection);
var usersRouter = require("./routes/users");
var app = express();
app.use(bodyParser.json({ type: "application/json" }));
app.use(bodyParser.urlencoded({ extended: true }));
// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");
......@@ -31,13 +33,157 @@ app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(
expressSession({
secret: "me key",
resave: true,
saveUninitialized: true,
})
);
app.use(express.static(path.join(__dirname, "public")));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
var router = express.Router();
var UserModel = require("./models/user");
let LocalStrategy = require("passport-local").Strategy;
passport.use(
"local-login",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
async function (req, email, password, done) {
console.log("passport의 local-login 호출됨." + email + ", " + password);
try {
let u = await UserModel.findOne({ email: email, password: password });
if (!u) {
console.log("이메일과 비밀번호가 일치하지 않습니다.");
return done(
null,
false,
req.flash("loginMessage", "이메일과 비밀번호를 다시 확인해 주세요.")
);
}
console.log("계정과 비밀번호가 일치함");
console.log(u);
return done(null, user);
} catch (err) {
console.log("로그인 인증과정에서 에러발생");
console.log(err);
return done(err);
}
}
)
);
passport.use(
"local-signup",
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
passReqToCallback: true,
},
async function (req, email, password, done) {
console.log("local-signup 실행됨.");
var paramName = req.body.name || req.query.name;
console.log(
"passport의 local-signup 호출됨 : " +
email +
", " +
password +
", " +
paramName
);
try {
let u = await UserModel.findOne({ email: email });
if (u) {
console.log("기존에 계정이 있음.");
return done(
null,
false,
req.flash("signupMessage", "계정이 이미 있습니다.")
);
} else {
let user = new UserModel({
email: email,
password: password,
name: paramName,
});
let saved = await user.save();
if (saved) {
console.log("사용자 데이터 추가함.");
return done(null, user);
}
}
} catch (err) {
console.log(err);
return done(err);
}
}
)
);
passport.serializeUser(function (user, done) {
console.log("serializeUser() 호출됨.");
console.dir(user);
done(null, user);
});
passport.deserializeUser(function (user, done) {
console.log("deserializeUser()호출됨.");
console.dir(user);
done(null, user);
});
router.post(
"/login",
passport.authenticate("local-login", {
successRedirect: "http://localhost:3001/profile",
failureRedirect: "http://localhost:3000/login",
failureFlash: true,
})
);
router.post(
"/signup",
passport.authenticate("local-signup", {
successRedirect: "http://localhost:3001/profile",
failureRedirect: "http://localhost:3000/signup",
failureFlash: true,
})
);
router.get("/profile", function (req, res) {
console.log("/profile 패스 요청됨.");
console.log(req.user);
if (!req.user) {
console.log("사용자 인증이 안 된 상태임.");
res.redirect("/");
return;
}
console.log("사용자 인증된 상태임");
if (Array.isArray(req.user)) {
res.send(req.user[0]._doc);
} else {
res.send(req.user);
}
});
app.use("/", router);
//app.use("/", indexRouter);
app.use("/users", usersRouter);
//app.use("/", usersRouter);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
......
......@@ -323,6 +323,33 @@
}
}
},
"express-session": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz",
"integrity": "sha512-UbHwgqjxQZJiWRTMyhvWGvjBQduGCSBDhhZXYenziMFjxst5rMV+aJZ6hKPHZnPyHGsrqRICxtX8jtEbm/z36Q==",
"requires": {
"cookie": "0.4.0",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-headers": "~1.0.2",
"parseurl": "~1.3.3",
"safe-buffer": "5.2.0",
"uid-safe": "~2.1.5"
},
"dependencies": {
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
},
"safe-buffer": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
}
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
......@@ -692,6 +719,11 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
"integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
......@@ -928,6 +960,14 @@
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true
},
"uid-safe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
"integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
"requires": {
"random-bytes": "~1.0.0"
}
},
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
......
......@@ -11,6 +11,7 @@
"debug": "~2.6.9",
"dotenv": "^8.2.0",
"express": "~4.16.1",
"express-session": "^1.17.1",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"mongoose": "^5.10.15",
......
......@@ -22,8 +22,8 @@ passport.use(
console.log("이메일과 비밀번호가 일치하지 않습니다.");
return done(
null,
false,
req.flash("loginMessage", "이메일과 비밀번호를 다시 확인해 주세요.")
false
//req.flash("loginMessage", "이메일과 비밀번호를 다시 확인해 주세요.")
);
}
console.log("계정과 비밀번호가 일치함");
......@@ -47,6 +47,7 @@ passport.use(
passReqToCallback: true,
},
async function (req, email, password, done) {
console.log("local-signup 실행됨.");
var paramName = req.body.name || req.query.name;
console.log(
"passport의 local-signup 호출됨 : " +
......@@ -62,8 +63,8 @@ passport.use(
console.log("기존에 계정이 있음.");
return done(
null,
false,
req.flash("signupMessage", "계정이 이미 있습니다.")
false
//req.flash("signupMessage", "계정이 이미 있습니다.")
);
} else {
let user = new UserModel({
......@@ -98,36 +99,40 @@ passport.deserializeUser(function (user, done) {
done(null, user);
});
router.post("/login", function (req, res, next) {
passport.authenticate("local-login", function (err, user, info) {
if (err) {
console.log(err);
return next(err);
}
if (user) {
console.log("req.user : " + JSON.stringify(user));
let json = JSON.parse(JSON.stringify(user));
req.logIn(user, function (err) {
if (err) {
return next(err);
}
});
} else {
console.log("login fail!!!!!!!!!!!!!!!");
res.send([]);
}
})(req, res, next);
});
router.post(
"/login",
passport.authenticate("local-login", {
successRedirect: "http://localhost:3000/profile",
failureRedirect: "http://localhost:3000/login",
failureFlash: true,
})
);
router.post(
"/signup",
passport.authenticate("local-signup", {
successRedirect: "/profile",
failureRedirect: "/signup",
successRedirect: "http://localhost:3000/profile",
failureRedirect: "http://localhost:3000/signup",
failureFlash: true,
})
);
router.get("/profile", function (req, res) {
console.log("/profile 패스 요청됨.");
console.log(req.user);
if (!req.user) {
console.log("사용자 인증이 안 된 상태임.");
res.redirect("/");
return;
}
console.log("사용자 인증된 상태임");
if (Array.isArray(req.user)) {
res.send(req.user[0]._doc);
} else {
res.send(req.user);
}
});
module.exports = router;
[{"C:\\WYH\\frontend\\src\\reportWebVitals.js":"1","C:\\WYH\\frontend\\src\\App.js":"2","C:\\WYH\\frontend\\src\\index.js":"3","C:\\WYH\\frontend\\src\\Home.js":"4","C:\\WYH\\frontend\\src\\Signup.js":"5","C:\\WYH\\frontend\\src\\Login.js":"6","C:\\WYH\\frontend\\src\\Profile.js":"7"},{"size":362,"mtime":1606157613272,"results":"8","hashOfConfig":"9"},{"size":932,"mtime":1606312284464,"results":"10","hashOfConfig":"9"},{"size":544,"mtime":1606240034288,"results":"11","hashOfConfig":"9"},{"size":370,"mtime":1606296711314,"results":"12","hashOfConfig":"9"},{"size":1533,"mtime":1606312007071,"results":"13","hashOfConfig":"9"},{"size":1175,"mtime":1606312363487,"results":"14","hashOfConfig":"9"},{"size":573,"mtime":1606311449946,"results":"15","hashOfConfig":"9"},{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"10w9ldj",{"filePath":"18","messages":"19","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20","messages":"21","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22","messages":"23","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"24","messages":"25","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"26","messages":"27","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"28","messages":"29","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\WYH\\frontend\\src\\reportWebVitals.js",[],"C:\\WYH\\frontend\\src\\App.js",["30"],"C:\\WYH\\frontend\\src\\index.js",[],"C:\\WYH\\frontend\\src\\Home.js",["31"],"C:\\WYH\\frontend\\src\\Signup.js",[],"C:\\WYH\\frontend\\src\\Login.js",[],"C:\\WYH\\frontend\\src\\Profile.js",[],{"ruleId":"32","severity":1,"message":"33","line":1,"column":17,"nodeType":"34","messageId":"35","endLine":1,"endColumn":26},{"ruleId":"32","severity":1,"message":"36","line":2,"column":10,"nodeType":"34","messageId":"35","endLine":2,"endColumn":15},"no-unused-vars","'Component' is defined but never used.","Identifier","unusedVar","'Route' is defined but never used."]
\ No newline at end of file
[{"C:\\WYH\\frontend\\src\\reportWebVitals.js":"1","C:\\WYH\\frontend\\src\\App.js":"2","C:\\WYH\\frontend\\src\\index.js":"3","C:\\WYH\\frontend\\src\\Home.js":"4","C:\\WYH\\frontend\\src\\Signup.js":"5","C:\\WYH\\frontend\\src\\Login.js":"6","C:\\WYH\\frontend\\src\\Profile.js":"7"},{"size":362,"mtime":1606157613272,"results":"8","hashOfConfig":"9"},{"size":932,"mtime":1606312284464,"results":"10","hashOfConfig":"9"},{"size":544,"mtime":1606240034288,"results":"11","hashOfConfig":"9"},{"size":370,"mtime":1606296711314,"results":"12","hashOfConfig":"9"},{"size":1596,"mtime":1606325070152,"results":"13","hashOfConfig":"9"},{"size":1235,"mtime":1606326896774,"results":"14","hashOfConfig":"9"},{"size":1006,"mtime":1606324675418,"results":"15","hashOfConfig":"9"},{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"10w9ldj",{"filePath":"18","messages":"19","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"20","messages":"21","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"22","messages":"23","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"24"},{"filePath":"25","messages":"26","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"27","messages":"28","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"29","messages":"30","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"C:\\WYH\\frontend\\src\\reportWebVitals.js",[],"C:\\WYH\\frontend\\src\\App.js",["31"],"C:\\WYH\\frontend\\src\\index.js",[],"C:\\WYH\\frontend\\src\\Home.js",["32"],"import React from \"react\";\r\nimport { Route, Link } from \"react-router-dom\";\r\n\r\nconst Home = () => {\r\n return (\r\n <div>\r\n <h1>WYB홈페이지입니다.</h1>\r\n <button>\r\n <Link to=\"/login\">로그인</Link>\r\n </button>\r\n <button>\r\n <Link to=\"/signup\">회원가입</Link>\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default Home;\r\n","C:\\WYH\\frontend\\src\\Signup.js",["33"],"C:\\WYH\\frontend\\src\\Login.js",["34"],"C:\\WYH\\frontend\\src\\Profile.js",[],{"ruleId":"35","severity":1,"message":"36","line":1,"column":17,"nodeType":"37","messageId":"38","endLine":1,"endColumn":26},{"ruleId":"35","severity":1,"message":"39","line":2,"column":10,"nodeType":"37","messageId":"38","endLine":2,"endColumn":15},{"ruleId":"35","severity":1,"message":"40","line":3,"column":10,"nodeType":"37","messageId":"38","endLine":3,"endColumn":14},{"ruleId":"35","severity":1,"message":"40","line":2,"column":10,"nodeType":"37","messageId":"38","endLine":2,"endColumn":14},"no-unused-vars","'Component' is defined but never used.","Identifier","unusedVar","'Route' is defined but never used.","'post' is defined but never used."]
\ No newline at end of file
......@@ -8,23 +8,23 @@ const Login = () => {
const onChangeUsername = (e) => setUsername(e.target.value);
const onChangePassword = (e) => setPassword(e.target.value);
const handleFormSubmit = () => {
const url = "/login";
let formData = new FormData();
formData.append("username", username);
formData.append("password", password);
// const handleFormSubmit = () => {
// const url = "/login";
// let formData = new FormData();
// formData.append("username", username);
// formData.append("password", password);
let config = {
headers: {
"content-type": "multipart/form-data",
},
};
// let config = {
// headers: {
// "content-type": "multipart/form-data",
// },
// };
return post(url, formData, config);
};
// return post(url, formData, config);
// };
return (
<form onSubmit={handleFormSubmit}>
<form action="http://localhost:3001/login" method="post">
<h1>로그인 화면</h1>
이메일:
<input
......@@ -35,7 +35,7 @@ const Login = () => {
></input>
비밀번호:
<input
type="pasword"
type="password"
name="password"
value={password}
onChange={onChangePassword}
......
import React, { useState } from "react";
import React, { useEffect, useState } from "react";
import axios from "axios";
const Profile = (login_info) => {
const Profile = () => {
const [user, setUser] = useState("");
fetch("/login", {
method: "post",
headers: {
"Content-Type": "application/json; charset=utf-8",
},
credentials: "same-origin",
body: JSON.stringify(login_info),
})
.then((res) => res.json())
.then((data) => {
console.dir(data);
setUser(data);
});
return (
<div>
<h1>{user.username}</h1>
<h1>{user.nicname}</h1>
</div>
);
useEffect(() => {
const fetchData = async () => {
const result = await axios("http://localhost:3000/profile");
console.dir(result);
setUser(result.data);
};
fetchData();
}, []);
return <div>{user}</div>;
};
// const Profile = (login_info) => {
// const [user, setUser] = useState("");
// fetch("/profile", {
// method: "get",
// headers: {
// "Content-Type": "application/json; charset=utf-8",
// },
// credentials: "same-origin",
// body: JSON.stringify(login_info),
// })
// .then((res) => res.json())
// .then((data) => {
// console.dir(data);
// setUser(data);
// });
// return (
// <div>
// <h1>{user.username}</h1>
// <h1>{user.nicname}</h1>
// </div>
// );
// };
export default Profile;
......@@ -11,24 +11,24 @@ const Signup = () => {
const onChangeNicname = (e) => setNicname(e.target.value);
const onChangePassword = (e) => setPassword(e.target.value);
const handleFormSubmit = () => {
const url = "/signup";
const formData = new FormData();
formData.append("username", username);
formData.append("password", password);
formData.append("nicname", nicname);
// const handleFormSubmit = () => {
// const url = "/signup";
// const formData = new FormData();
// formData.append("username", username);
// formData.append("password", password);
// formData.append("nicname", nicname);
const config = {
headers: {
"content-type": "multipart/form-data",
},
};
// const config = {
// headers: {
// "content-type": "multipart/form-data",
// },
// };
return post(url, formData, config);
};
// return post(url, formData, config);
// };
return (
<form onSubmit={handleFormSubmit}>
<form action="http://localhost:3001/signup" method="post">
<h1>회원가입</h1>
이메일:
<input
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment