Backend/Node.js

[Node.js] 로그인, 로그아웃

seoooc 2022. 4. 4. 18:31

 

 

login.html

<!DOCTYPE html>
<html lang="kr">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>로그인</title>
</head>
<body>
    <form>
        아이디 : <input type="text" name="userid"/><br/>
        비밀번호 : <input type="password" name="userpwd"><br/>
        <input type="submit" value="login"/>
    </form>
</body>
</html>

 

 

index.ejs

<!DOCTYPE html>
<html lang="kr">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
</head>

<body>
    <%=logStatus%>,<%=user.userid%>,<%=user.username%>

    <% if(logStatus != 'Y') {%>
        <a href="/login">로그인</a>
    <%}else if(logStatus =='Y'){%>
      <%=user.username%><a href="/logout">로그아웃</a>
    <%}%>
    <a href="/list">게시판</a>
</body>

</html>

 

 

세션 모둘 설치하고 세션 객체 생성하기

var session = require('express-session');
//npm install express-session

 

 

mainProcess.js

//로그인 폼 이동
app.get("/login", function (req, res) {
    fs.readFile(__dirname + '/login.html', 'utf-8', (error, loginData) => {
        res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
        res.end(loginData);
    });
});

//로그인
app.post("/loginOk", function (req, res) {
    var userid = req.body.userid;
    var userpwd = req.body.userpwd;
    console.log("id=", userid, "pwd=", userpwd);
    var sql = "select userid, username from member where userid=? and userpwd=?";

    connection.execute(sql, [userid, userpwd], function (error, record) {
        if (error) {// 로그인 실패시 로그인으로 이동
            res.redirect("/login");
        } else {
            console.log(record);
            if(record.length>0){//로그인 성공
                session.user = {
                    userid: record[0].userid,
                    username: record[0].username,
                    autorized : true    //인증받음
                }

                res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
               
                fs.readFile(__dirname + "/index.ejs", "utf-8", function (err, data) {
                    if (err) {
                        res.end("404 Page");
                    } else {
                        res.end(ejs.render(data, {
                            user: session.user,
                            logStatus : "Y"
                        }));
                    }
                });
            } else {//레코드 없을 때
                res.redirect("/login");
            }
        }
    });
});

 

 

//로그아웃
app.get("/logout", (req, res) => {
    if (session.user) { //세션에 정보 있을 때 = 로그인 상태
        session.user = null;
        fs.readFile(__dirname + "/index.ejs", "utf-8", (error, data) => {
            res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
            res.end(ejs.render(data, {
                logStatus:'N'
            }));
        });
    } else {
        console.log("로그아웃 상태");
    } 
});

 

 

 

※ execute 동작이 안 돼서 query로 바꿔줬더니 정상 실행됨!