티스토리 뷰
Project/첫번째 프로젝트 쇼핑몰 웹
[ node js - express 쇼핑몰 웹] 5. Seller 등록, 취소 구현
무니웜테일패드풋프롱스 2020. 7. 22. 22:36📌 2020 07 21
- Seller 등록을 구현하여 Seller로 등록된 유저에게만 Admin Product와 add Product 항목이 보이도록 수정함
- Amazon 웹에서 착안한 아이디어 !
Seller 등록 및 취소 flow
- login이 되었을 때만 가능하다.
- Seller가 되기 위해서는 Seller name을 입력하도록 한다. 입력한 Seller name은 해당 User 데이터베이스에 저장된다
- Seller인 회원에게는 Seller를 취소할 것인가에 대한 항목을 보여준다.
- 취소하기위해서는 비밀번호로 인증해야한다. Seller를 취소하면 그동안 post 했던 모든 Product가 사라진다.
- isLoggedIn과 함께 isSeller도 req.locals에 저장해준다.
app.use((req,res,next)=>{
res.locals.isAuthenticated = req.session.isLoggedIn;
res.locals.isSeller=undefined; // 먼저 undefined 할당해준다.
if(req.user){ // 로그인이 되었다면
res.locals.isSeller = req.user.Seller; } // 로그인한 유저의 Seller정보로 할당해준다.
res.locals.csrfToken=req.csrfToken();
next();
});
seller authentication 라우팅 : seller만 접근할 수 있는 add product, admin product로의 접근을 차단한다.
exports.sellerCheck =(req,res,next)=>{
if(!req.session.isLoggedIn){
return res.redirect('/login');
}
else if(!req.user.Seller){
return res.redirect('/sell');
}
next();
}
seller 등록 post 라우팅 : 유저 데이터에 입력받은 sellerName을 저장해준다.
exports.postSell=(req,res,next)=>{
const sellerName = req.body.sellerName;
User.findById(req.user._id)
.then(user=>{
user.Seller=sellerName; // 유저 데이터에 저장
return user.save();
})
.then(result=>{
res.redirect('/admin/add-product');
sendMail(email,'you are a Seller now!', SellerMessage); // 이메일 전송
})
.catch(err=>next(err));
}
seller 취소 post 라우팅 : 먼저 비밀번호를 확인하고 비밀번호가 맞을 경우 Seller를 다시 undefined로 수정한뒤, 해당 user가 등록한 모든 Product를 삭제해준다.
exports.postSellDelete=(req,res,next)=>{ // seller 취소
const password=req.body.password;
User.findById(req.user._id)
.then(user=>{
return bcrypt.compare(password,user.password) // 비밀번호 확인
.then(doMatch=>{
if(doMatch){ // 비밀번호 맞을 경우
user.Seller=undefined;
return user.save()
.then(result=>{
return Product.deleteMany({userId:user._id}); // 해당 유저가 등록한 상품 모두 삭제
})
}
})
})
.then(result=>{
res.redirect('/sell');
})
}
'Project > 첫번째 프로젝트 쇼핑몰 웹' 카테고리의 다른 글
[ node js - express 쇼핑몰 웹] 7. 상품 검색 기능 구현 (0) | 2020.07.24 |
---|---|
[ node js - express 쇼핑몰 웹] 6. Cart 와 Order 수량 변경 기능 구현 / Cart 내에서 체크한 항목만 Order하는 기능 구현 (0) | 2020.07.22 |
[ node js - express 쇼핑몰 웹 ] 4. input data validation 추가 (0) | 2020.07.19 |
[node js - express 쇼핑몰 웹] 3. 로그인, 로그아웃, 회원가입 구현하기 (0) | 2020.07.16 |
[node js - express 쇼핑몰 웹] 2. 삭제된 product 정보 cart와 order에 적용시키기 (0) | 2020.07.15 |
댓글