dukDukz

21.05.24 local 로그인 & 공통(local, kakao) 로그아웃 본문

웹 개발/Node JS

21.05.24 local 로그인 & 공통(local, kakao) 로그아웃

헤일리_HJ 2021. 5. 24. 12:30

index.html

{% if logininfo == undefined %}
    <!--로그인 처리가 안된 경우-->
    <a href="/login">로그인</a>
    <a href="/auth/kakao">카카오로그인</a>
{% else %}
    <!--로그인 처리가 된 경우-->
    <a href="/auth/info">회원정보</a>
    <a href="/auth/logout">로그아웃</a>
{% endif %}


{% if msg %}
<script>
    alert("{{msg}}")
</script>
{% endif %}

server.js localhost:3000 main 

- 여기서 logininfo 값을 index.html 에 보내준다.

더보기
app.get('/',(req,res)=>{
    const {msg} = req.query;
    //console.log(req.session.authData);
    res.render('./index.html',{
        msg,
        logininfo : req.session.authData,
        // kakao든 local이든 로그인이 되면 두번 로그인 할 수 없게 처리하기 위해서 값을 보내준다
    });
});

 


 

server.js - login (로컬 로그인)

// 로그인 get, post
app.get('/login',(req,res)=>{
    res.render('login');
})

app.post('/login',(req,res)=>{
    //npm install body-parser
    const {session, body} = req;
    const {userid, userpw} = body;

    // userid userpw 값을 가지고 DB 조회
    // 있다고 가정하고 작성
    // userid root userpw root 일때 성공하는 시나리오 작성
    if(userid == 'root' && userpw == 'root'){
        //로그인 성공
        const data = {
            userid,
        }
        session.authData = {
            ["local"]:data,   
        }
        res.redirect('/?msg=로그인완료됨');
    }else{
        //로그인 실패
        res.redirect('/?msg=아이디와패스워드를 확인해주세요')
    }

})

 

 

server.js - 사용자 정보

app.get('/auth/info',authMiddleware,(req,res)=>{
    const {authData} = req.session;     
    const provider = Object.keys(authData)[0];      //kakao라는 글자를 provider라는 변수 안에 넣어주겠다
    
    switch(provider){   
        case "kakao":       
            userinfo = {
                userid : authData[provider].properties.nickname,
            }    
        break;

        case "local":{
            userinfo = {
                userid:authData[provider].userid,
            }
        }
    }

    res.render('info',{
        userinfo
    })
})

 

 

server.js - 공통 로그아웃

app.get('/auth/logout',(req,res)=>{
    const {session} = req
    const {authData} = session;    
    const provider = Object.keys(authData)[0]; 

    switch(provider){
        case "local":
            //로그아웃을 이렇게
            delete session.authData;
            res.redirect('/?msg=로그아웃 되었습니다');
        break;
        case "kakao":
            //kakao 로그아웃을 이렇게
            res.redirect('/auth/kakao/unlink');
        break;
    }
})

local or kakao logout