fefdfea
399
2021-06-16 11:05:06 작성 2021-06-16 11:10:41 수정됨
0
128

리엑트 + node js 쇼핑몰 제작 연습중 쿠키 저장에 대한 질문입니다.


안녕하세요 현재 쇼핑몰 제작을 해보며 공부중 질문이있어 글을 남기게 되었습니다. 제가 로그인 요청을 하면 로그인 정보가 맞는지 db에서 비교한후 맞으면 jwt방식을 이용하여 로그인을 구현하려 하는데 쿠키가 저장이 되지 않습니다. 코드는 아래와 같이 짰습니다.

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const crypto = require('crypto');
const jwt = require('jsonwebtoken');
const cookie = require('cookie-parser');
require('dotenv').config();

//미들웨어
app.use(express.static(__dirname + '/react-shop/build'));
app.use(express.urlencoded({ extended : true }));
app.use(express.json());
app.use(cookie());
//스키마 생성
const User = new mongoose.Schema({
  id : {
    type:String,
    unique:true,
    required: true,
    trim: true
  },
  pw:{
    type:String,
    required: true,
    trim: true
  },
  name:{
    type:String,
    required: true,
    trim: true
  },
  phone:{
    type:String,
    unique:true,
    required: true,
    trim: true
  },
  salt:{
    type : String,
  }
});

const UserSchma = mongoose.model('user',User,'UserInfo');


mongoose.connect(process.env.DB_URL,{
  useUnifiedTopology: true,
  useNewUrlParser:true,
  useFindAndModify:true,
})
.then(() => {
  app.listen(process.env.PORT,function(){
    console.log('서버시작');
  })
})
.catch((err=> {
  return err;
})


app.get('/',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/Detail/:id',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/Login',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/OrderList',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/Sign_in',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/Sign_up',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})
app.get('/Mypage',function(req,rsp){
  rsp.sendFile(__dirname + '/react-shop/build/index.html');
})

app.post('/Sign_up',function(req,rsp){
  UserSchma.findOne({ id:req.body.id },function(err,result){
    if(errreturn err
    if(result){
      return rsp.status(403).send({ message: '이미 존재하는 이메일입니다.' });
    }
    if(!result){
    //랜덤 salt생성
      if(errreturn err;
      //salt를 이용한 단방향 암호화 함수
      crypto.randomBytes(64,(err,buf=> {
        crypto.pbkdf2(req.body.pwbuf.toString('base64'), 10087264'sha512', (errkey=> {
          if(errreturn err
          const user = new UserSchma({
            id: req.body.id,
            pw: key.toString('base64'),
            name: req.body.name,
            phone: req.body.phone,
            salt: buf.toString('base64'),
          })
          user.save()
          .then(() => {
            rsp.status(200).send({ message: '회원가입!' });
          })
          .catch((err=> {
            if(err){
              rsp.status(400).send({ message :'정보가 올바른지 다시 확인해주십시오'});
              return err
            }
          });
        });
      })
    }
  });
});

app.post('/Sign_in',login,function(req,rsp){
  const accessCookie = generateAccessToken(req.body.id);
  const refreshCookie = generateRefreshToken(req.body.id);
  cookie('access',accessCookie);
  cookie('refresh',accessCookie);
  rsp.status(400);
});


function login(req,rsp,next){
  UserSchma.findOne({id: req.body.id},function(err,result){
    if(errreturn err;
    crypto.pbkdf2(req.body.pwresult.salt10087264'sha512', (errkey=> {
      if(errreturn err
      if(key.toString('base64') == result.pw){
        next()
      }
    });
  });
}

//access 토큰 발급
function generateAccessToken(id){
  return jwt.sign({id},
  process.env.SECRET_KEY,
    {
    expiresIn: '1h',
    })
}
//refresh 토큰 발급
function generateRefreshToken(id){
  return jwt.sign({id},
    process.env.SECRET_KEY,
    {
    expiresIn: '1 days',
    })
}
0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.