• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

로그아웃시 req logout의 콜백함수 에러가 납니다...

23.10.31 00:41 작성 조회수 232

1

req.logout을 호출할때 콜백함수가 필요하다 라고 나옵니다.

req#logout requires a callback function

이런식으로요

제 코드는 제로초님 코드처럼 적어놨는데 제가 이해하는 콜백함수라는게 라우터 부분이라고 생각이 드는데 어떻게 수정을 해야할지 감이 안잡힙니다 ㅜㅜ

const express = require('express');
const bcrypt = require('bcrypt');
const passport = require('passport');
const {
    isLoggedIn, isNotLoggedIn
} = require('./middlwares')
const { User, Post } = require('../models');

const router = express.Router();

router.post("/login", isNotLoggedIn, (req, res, next) => {
    passport.authenticate("local", (err, user, info) => {
        
        if (err) { // 서버에러 부분
            console.error(err)
            return next(err)
        }
        if(info){// 클라이언트 에러 부분
            return res.status(401).send(info.reason)
        }
        // 성공시 
        return req.login(user,async(loginErr)=>{
            // 패스포트 에러날시
            if(loginErr){
                console.error(loginErr)
                return next(loginErr)
            }
            // 유저의 모든 정보
            const fullUserWithoutPassword = await User.findOne({
                where:{id:user.id},
                // 비밀번호 제외
                // 받고 싶은 정보만 적을경우 
                // attributes:["id","nickname","email"],
                attributes: {
                    exclude:["password"]
                },
                // 나머지 정보
                include:[{
                    model:Post
                }, {
                    model: User,
                    as: "Followings",
                }, {
                    model: User,
                    as: "Followers",
                }]
            })
            // post 팔로워 팔로잉 정보 비밀번호 제거 
            return res.status(200).json(fullUserWithoutPassword)
        })
    })(req,res,next)
})

router.post("/", isNotLoggedIn, async (req, res, next) => {
    try {
        const exUser = await User.findOne({// 중복이 됫는지아닌지.
            where:{ 
                email:req.body.email,
            }
        })
        if(exUser){
           return res.status(403).send("이미 사용중인 아이디입니다.")
        }
        const hashedPassword = await bcrypt.hash(req.body.password, 12)
        await User.create({
            email:req.body.email,
            nickname: req.body.nickname,
            password: hashedPassword,
        })
        // res.setHeader("Access-Control-Allow-Origin","http://localhost:3000")
        res.status(201).send("회원가입이 완료되셨습니다.") // 201은 생성이 잘됫다.
    } catch (error) {
        console.error(error)
        next(error)// 에러가 난거를 브라우저에 알려준다. statsus:500
    }
})

router.post('/logout', (req, res) => {
    req.logout();
    req.session.destroy();
    res.send('ok');

    
});
module.exports = router

답변 1

답변을 작성해보세요.

0

공지사항 확인하세요 버전 업에 따라 방식이 바뀌었습니다

GI P님의 프로필

GI P

질문자

2023.10.31

감사합니다!
req.logout(()=>{

res.send('ok');

})
이런식으로 req.send를 밖이 아니라 req.logout안에 넣어야하는군요 ㅠㅠ