본문 바로가기
개발

[Node.js] 로그인, 회원가입 기능 구현

by jwcs 2024. 2. 18.
728x90

index.js

const express = require('express');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/config/config')[env];
const sequelize = new Sequelize(config.database, config.username, config.password, config);

const user = require('./user')(sequelize, Sequelize.DataTypes);

const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.set('port', process.env.PORT || 3000);

const session = require('express-session');
app.use(session({
    secret: 'jwcs',
    resave: false,
    saveUnionitialized: true,
    cookie: { secure: false }
}));

sequelize.sync({ force: false })
    .then(() => {
        console.log('데이터베이스 연결 성공');
    })
    .catch((err) => {
        console.error(err);
    })

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/signup.html');
});

app.post('/signup', (req, res) => {
    user.findOne({
        where: {
            username: req.body.username,
        },
    })
        .then(alreadyAccount => {
            if (alreadyAccount) {
                res.send('이미 계정이 있습니다');
            }
            else {
                user.create({
                    username: req.body.username,
                    password: req.body.password,
                })
                    .then(success => {
                        res.sendFile(__dirname + '/login.html');
                    })
                    .catch(error => {
                        res.send('error');
                    })
            }
        })
});

app.post('/login', (req, res) => {
    user.findOne({
        where: {
            username: req.body.username,
            password: req.body.password,
        }
    })
        .then(success => {
            if (success) {
                req.session.username = req.body.username;
                res.send(req.session.username);
            }
            else {
                res.send('아이디를 찾을 수 없습니다');
            }
        })
        .catch(error => {
            res.send('error');
        })
});

app.listen(app.get('port'), () => {
    console.log(app.get('port'), '번 포트에서 대기 중');
});

 

user.js

const { Model, DataTypes } = require('sequelize');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/config/config')[env];
const sequelize = new Sequelize(config.database, config.username, config.password, config);

class user extends Model {
    static init(sequelize) {
        super.init({
            username: {
                type: DataTypes.STRING,
                allowNull: false
            },
            password: {
                type: DataTypes.STRING,
                allowNull: false
            }
        }, {
            sequelize,
            modelName: 'user',
            tableName: 'user'
        })
    }
};

module.exports = () => {
    user.init(sequelize);
    return user;
};

 

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>login</title>
</head>
<body>
    로그인<br>
    <form action="/login" method="post">
        아이디 <input type="text" name="username"><br>
        비밀번호 <input type="text" name="password"><br>
        <input type="submit">
    </form>
</body>
</html>

 

signup.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>signup</title>
</head>
<body>
    회원가입<br>
    <form action="/signup" method="post">
        아이디 <input type="text" name="username"><br>
        비밀번호 <input type="text" name="password"><br>
        <input type="submit">
    </form>
</body>
</html>

 

/signup.html

첫 페이지는 회원가입 페이지로 구성했다.

 

이미 존재하는 아이디 입력시
이미 계정이 있습니다

이미 존재하는 아이디 입력시 `이미 계정이 있습니다`라는 문구를 보내도록 설정했다.

index.js

이런 식으로 구현했다.

 

존재하지 않는 아이디 입력시
로그인 페이지

존재하지 않는 아이디 입력시 데이터베이스에 해당 계정을 추가하고 로그인 페이지를 띄우도록 설계했다

index.js

signup에 대한 전체 구성이다

 

없는 아이디로 로그인 시도시
아이디를 찾을 수 없습니다

존재하지 않는 아이디로 로그인 시도했을 경우, 아이디를 찾을 수 없다는 문자열을 보낸다

존재하는 아이디 입력시
해당 아이디 출력 및 세션 설정

존재하는 아이디로 로그인을 했을 경우 해당 아이디를 출력하고, 세션을 설정한다

index.js

이런 식으로 구성했다

728x90
반응형

'개발' 카테고리의 다른 글

[MySQL] 챕터 3. MySQL 전체 운영 실습  (1) 2024.02.28
[MySQL] 챕터 1. DBMS 개요와 MySQL 소개  (1) 2024.02.26
[Node.js] 8장  (0) 2024.02.16
[Node.js] 7장  (0) 2024.02.16
[Node.js] 1~6장 복습  (0) 2024.02.15