• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 로그인 failureRedirect

로그인 failureRedirect

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 글쓴이
  • #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에 리액트로 라우팅 하였습니다.

     

     

    #33401

    codingapple
    키 마스터

    passport.deserializeUser 아마 여기가 비어있어서 그런듯요 뭔가 있어야 세션이 생깁니다 

    #33414

    임건태
    참가자

    passport.deserializeUser(function(아이디, done){
      db.collection('login').findOne({id : 아이디},function(에러 ,결과){
        done(null , 결과)
      })  
     
    });

     

    해당 코드로 수정해도 안 되네요.. 자꾸만 로그인 하면 성공하면 이동되는 메인페이지로 이동이 안 되고 /fail 페이지로만 넘어갑니다..

    #33428

    codingapple
    키 마스터

    리액트에서 폼으로 로그인요청하면 새로고침되어서 의도와 다르게 동작할 수 있습니다

    ajax로 요청해봅시다 

    #33444

    임건태
    참가자

    솔루션 감사합니다!! ajax로 요청을 하니 로그인이 성공하여 세션이 잘 생성이 됩니다

    그런데 로그인이 완료되면 메인 페이지로 리다이렉트 되도록 되어있는데 로그인 페이지에서 변화가 없네요..

    별다른 에러 메시지 없이 반응이 없어서 어떤식으로 해결해야할지 잘 모르겠습니다 예상가는 문제가 있을까요?

    #33449

    임건태
    참가자

    앗 ajax요청 한곳에서 then으로 history.push하면 되는거 였네요.. 해결했습니다 감사합니다!

6 글 보임 - 1 에서 6 까지 (총 6 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠