-
글쓴이글
-
2022년 5월 6일 21:58 #33383
임건태참가자현재 리액트, node.js + MongoDB 강의 들은것 바탕으로 그동안 배운것 다 합쳐서 쇼핑몰 웹페이지를 만들고 있습니다
세션 로그인 구현중에 문제가 발생하여 질문드립니다
로그인 페이지에서 로그인을 시도하는데 db에 저장된 id와 pw를 정확히 입력을 해도 failureRedirect로 실패 페이지로 자꾸 이동이 됩니다.
페이지에 쿠키도 저장되지 않습니다. 기존에 node.js 강의 들을때 todoapp 구현중에는 잘 되었는데 쇼핑몰 페이지에 구현을 해보려니 잘 안 되네요..
코드 첨부 드립니다, 혹시 예상가는 문제점이 있다면 알려주시면 감사하겠습니다!
========sever.js 코드=================================
const express = require('express');
const path = require('path');
const app = express();
const http = require('http').createServer(app);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());app.use(express.json());
var cors = require('cors');
const { dblClick } = require('@testing-library/user-event/dist/click');
app.use(cors());const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb+srv://admin:qwe123@cluster0.l0ye5.mongodb.net/shop?retryWrites=true&w=majority', function(에러, client){
if (에러) return console.log(에러);
db = client.db('shop');
http.listen(8079, function () {
console.log('listening on 8079')
});
})app.get('/newpro' , function(요청 , 응답){
db.collection('newpro').find({}).toArray(function(에러,결과){
console.log(결과);
//응답.status(200).send({ message : '성공했습니다' });
응답.status(200).send({data : 결과})
})
})app.use(express.static(path.join(__dirname, '/build')));
app.get('/', function (요청, 응답) {
응답.sendFile(path.join(__dirname, '/build/index.html'));
});app.get('/image/:imageName', function(요청,응답){
응답.sendFile( __dirname + '/public/img/' + 요청.params.imageName)
})app.post('/login', passport.authenticate('local', {failureRedirect : '/fail'}), function(요청, 응답){
응답.redirect('/')
});passport.use(new LocalStrategy({
usernameField: "id",
passwordField: "pw",
session: true,
passReqToCallback: false,
}, function (입력한아이디, 입력한비번, done) {
console.log(입력한아이디, 입력한비번);
db.collection('login').findOne({ id: 입력한아이디 }, function (에러, 결과) {
console.log(id);
if (에러) return done(에러)
if (!결과) return done(null, false, { message: '존재하지않는 아이디요' })
if (입력한비번 == 결과.pw) {
return done(null, 결과)
} else {
return done(null, false, { message: '비번틀렸어요' })
}
})
}));passport.serializeUser(function (user, done) {
done(null, user.id)
});passport.deserializeUser(function (아이디, done) {
done(null, {})
});==================login.js 코드======================
import React from "react";
import {Form , Button} from "react-bootstrap";
import './App.css';function Login(){
return(
<div>
<br></br><Form className="form" action="/login" method="POST">
<p className="login-logo">Login</p><br></br><br></br>
<Form.Group className="mb-3" controlId="formBasicEmail">
<Form.Label >이메일 주소</Form.Label>
<Form.Control type="text" name="id" placeholder="Enter email" / >
</Form.Group><Form.Group className="mb-3" controlId="formBasicPassword">
<Form.Label >비밀번호</Form.Label>
<Form.Control type="password" name="pw" placeholder="Password" />
</Form.Group><Button className="login-btn btn btn-dark" variant="primary" type="submit">
로그인
</Button>
</Form>
</div>
)
}export default Login;
==============================================
로그인 페이지 라우팅은 app.js에 리액트로 라우팅 하였습니다.
2022년 5월 7일 09:55 #33401
codingapple키 마스터passport.deserializeUser 아마 여기가 비어있어서 그런듯요 뭔가 있어야 세션이 생깁니다
2022년 5월 7일 14:40 #33414
임건태참가자passport.deserializeUser(function(아이디, done){
db.collection('login').findOne({id : 아이디},function(에러 ,결과){
done(null , 결과)
})
});해당 코드로 수정해도 안 되네요.. 자꾸만 로그인 하면 성공하면 이동되는 메인페이지로 이동이 안 되고 /fail 페이지로만 넘어갑니다..
-
글쓴이글
- 답변은 로그인 후 가능합니다.