8 글 보임 - 1 에서 8 까지 (총 8 중에서)
-
글쓴이글
-
2023년 2월 17일 11:32 #68755
김정원참가자안녕하세요. 노드 강의 듣는 중 질문이 있어 글 올립니다. // 회원가입 app.post('/register', function(요청, 응답){ db.collection('login').insertOne( {id : 요청.body.id, pw : 요청.body.pw}, function(에러, 결과){ 응답.redirect('/') }) });
app.post('/add', function(요청, 응답){ db.collection('counter').findOne({ name : '게시물갯수'}, function(에러, 결과){ var 총게시물갯수 = 결과.totalPost; var 저장할거 = { _id : 총게시물갯수 + 1, 작성자 : 요청.user._id, 제목 : 요청.body.title, 날짜 : 요청.body.date }
db.collection('post').insertOne(저장할거, function(에러, 결과){ db.collection('counter').updateOne({name : '게시물갯수'}, { $inc : {totalPost:1} }, function(에러, 결과){ if(에러){return console.log(에러)} 응답.send('전송완료'); }) }) }) }) 위와 같이 코드를 짰는데, 몽고DB post 콜렉션에는 작성자가 null로 뜹니다.( login 콜렉션에는 가입한 id, pw, _id(자동으로 부여됨)는 잘 기입되어 있습니다) login 콜렉션에도 정상적으로 기입되어 있고 코드도 passport 밑으로 이동시켰는데 무엇이 문제일까요?
2023년 2월 17일 18:27 #68842
김정원참가자말씀하신대로 미들웨어 추가했는데 여전히 몽고DB에는 작성자가 null로 뜹니다... 중간 passport 코드 추가로 첨부드립니다 ㅠㅠ // 미들웨어 function 로그인했니(요청, 응답, next){ if(요청.user){ next() // next() 통과 } else{ 응답.send('로그인 안 하셨네요') } }
passport.use(new LocalStrategy({ usernameField: 'id', passwordField: 'pw', session: true, passReqToCallback: false, }, function (입력한아이디, 입력한비번, done) { //console.log(입력한아이디, 입력한비번); db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) { if (에러) return done(에러) if (!결과) return done(null, false, { message: '존재하지않는 아이디요' }) // DB에 아이디가 없으면 이거 실행 if (입력한비번 == 결과.pw) { return done(null, 결과) } else { return done(null, false, { message: '비번틀렸어요' }) } }) }));
passport.serializeUser(function (user, done) { done(null, user.id) }); passport.deserializeUser(function (아이디, done) { // 위에있는 user.id = 아이디 db.collection('login').findOne({ id: 아이디 }, function (에러, 결과){ done(null, {결과}) }) }); app.post('/register', function(요청, 응답){ db.collection('login').insertOne( {id : 요청.body.id, pw : 요청.body.pw}, function(에러, 결과){ 응답.redirect('/') }) });
// 회원가입 app.post('/register', function(요청, 응답){ db.collection('login').insertOne( {id : 요청.body.id, pw : 요청.body.pw}, function(에러, 결과){ 응답.redirect('/') }) }); app.post('/add', 로그인했니, function(요청, 응답){ db.collection('counter').findOne({ name : '게시물갯수'}, function(에러, 결과){ var 총게시물갯수 = 결과.totalPost; var 저장할거 = { _id : 총게시물갯수 + 1, 작성자 : 요청.user._id, 제목 : 요청.body.title, 날짜 : 요청.body.date } db.collection('post').insertOne(저장할거, function(에러, 결과){ db.collection('counter').updateOne({name : '게시물갯수'}, { $inc : {totalPost:1} }, function(에러, 결과){ if(에러){return console.log(에러)} 응답.send('전송완료'); }) }) }) })
2023년 2월 17일 20:33 #68865
codingapple키 마스터passport.deserializeUser(function (아이디, done) { // 위에있는 user.id = 아이디 db.collection('login').findOne({ id: 아이디 }, function (에러, 결과){ done(null, {결과}) }) }); 결과에 {} 빼거나 이상한곳에서 요청.user 잘나오나 출력부터 해봅시다
2023년 2월 17일 21:49 #68877
김정원참가자이것저것 다시 찾아보니 뭔가 마이페이지 만드는 부분(회원인증기능3)에 문제가 있는 것 같습니다. {결과} 에서 중괄호를 빼고 mapage에 접속하면 '로그인 안 하셨네요'가 뜨고, {결과} 에서 중괄호를 씌우고 mypage로 이동하면 콘솔창에 { '결과': null } 이라고 뜹니다. /mypage에는 '의 마이페이지입니다'라고만 뜹니다.(사용자 id는 출력되지 않아요ㅠㅠ) 아래 코드는 mypage.ejs <body>부분입니다(제이쿼리 적용 했습니다). <body>
<%- include('nav.html') %>
<p> <%= 사용자.id %>의 마이페이지입니다.</p>
</body> 여기저기 구글링도 해보고 뭐도 고쳐보고 해봤는데 노답입니다. 조금만 더 도와주세요...... 아래는 서버 코드입니다. 상단에는 라이브러리 코드도 예쁘게 있습니다.
// express 라이브러리 첨부, 사용 const express = require('express'); const app = express();
// bodyparser 라이브러리 const bodyParser= require('body-parser') app.use(bodyParser.urlencoded({extended: true}))
// 몽고DB (jwkim409 qwerty123) const MongoClient = require('mongodb').MongoClient;
// method-override 라이브러리 const methodOverride = require('method-override') app.use(methodOverride('_method'))
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; const session = require('express-session');
app.use(session({secret : '비밀코드', resave : true, saveUninitialized: false})); app.use(passport.initialize()); app.use(passport.session());
// 환경변수 사용을 위한 라이브러리 require('dotenv').config()
// EJS app.set('view engine', 'ejs');
// static 파일을 보관하기 위해 public 폴더 app.use('/public', express.static('public'));
// 로그인을 하면 아이디 비번 검사 app.post('/login', passport.authenticate('local', { failureRedirect : '/fail' }), function(요청, 응답){ 응답.redirect('/') });
// 미들웨어(마이페이지) app.get('/mypage', 로그인했니, function (요청, 응답) { console.log(요청.user); 응답.render('mypage.ejs', { 사용자: 요청.user }) })
// 마이페이지 접속 전 실행할 미들웨어 function 로그인했니(요청, 응답, next){ if(요청.user){ next() // next() 통과 } else{ 응답.send('로그인 안 하셨네요') } } // 로컬스트레티지(복붙) passport.use(new LocalStrategy({ usernameField: 'id', passwordField: 'pw', session: true, passReqToCallback: false, }, function (입력한아이디, 입력한비번, done) { //console.log(입력한아이디, 입력한비번); db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) { if (에러) return done(에러) if (!결과) return done(null, false, { message: '존재하지않는 아이디요' }) // DB에 아이디가 없으면 이거 실행 if (입력한비번 == 결과.pw) { return done(null, 결과) } else { return done(null, false, { message: '비번틀렸어요' }) } }) }));
// 세션 저장시키는 코드 passport.serializeUser(function (user, done) { done(null, user._id) }); passport.deserializeUser(function (아이디, done) { db.collection('login').findOne({ id: 아이디 }, function (에러, 결과) { done(null, {결과}) }) });
// 회원가입 app.post('/register', function(요청, 응답){ db.collection('login').insertOne( {id : 요청.body.id, pw : 요청.body.pw}, function(에러, 결과){ 응답.redirect('/') }) }); app.post('/add', 로그인했니,function(요청, 응답){ db.collection('counter').findOne({ name : '게시물갯수'}, function(에러, 결과){ var 총게시물갯수 = 결과.totalPost; var 저장할거 = { _id : 총게시물갯수 + 1, 작성자 : 요청.user._id, 제목 : 요청.body.title, 날짜 : 요청.body.date }
db.collection('post').insertOne(저장할거, function(에러, 결과){ db.collection('counter').updateOne({name : '게시물갯수'}, { $inc : {totalPost:1} }, function(에러, 결과){ if(에러){return console.log(에러)} 응답.send('전송완료'); }) }) }) })
2023년 2월 18일 11:37 #68931
김정원참가자이동해보고 변수 저장할거 출력 함 해봤습니다
app.post('/register', function(요청, 응답){ db.collection('login').insertOne( {id : 요청.body.id, pw : 요청.body.pw}, function(에러, 결과){ 응답.redirect('/') }) });
app.post('/add', 로그인했니,function(요청, 응답){ db.collection('counter').findOne({ name : '게시물갯수'}, function(에러, 결과){ var 총게시물갯수 = 결과.totalPost; var 저장할거 = { _id : 총게시물갯수 + 1, 작성자 : 요청.user._id, 제목 : 요청.body.title, 날짜 : 요청.body.date }
db.collection('post').insertOne(저장할거, function(에러, 결과){ db.collection('counter').updateOne({name : '게시물갯수'}, { $inc : {totalPost:1} }, function(에러, 결과){ if(에러){return console.log(에러)} console.log(저장할거) 응답.send('전송완료'); }) }) }) })
로그인 하고 리스트에 할 일 적어서 출력해보니 { _id: 39, '작성자': undefined, '제목': '12112', '날짜': '3232' } 역시 작성자가 undefined라고 뜨네요;; 코드 옮겨보고 고쳐보고 이렇게조렇게 해봤습니다 요청.user._id는 문제 없이 잘 쓴 것 같은데 왜... 왜 이러는 걸까요..
-
글쓴이글
8 글 보임 - 1 에서 8 까지 (총 8 중에서)
- 답변은 로그인 후 가능합니다.