user.controller.js 3.2 KB
Newer Older
한규민's avatar
한규민 committed
1
2
import jwt from "jsonwebtoken";
import config from "../config/app.config.js";
한규민's avatar
한규민 committed
3
import { User, Role } from '../db/index.js'
한규민's avatar
한규민 committed
4

Jiwon Yoon's avatar
Jiwon Yoon committed
5
const login = async (req, res) => {
한규민's avatar
한규민 committed
6
7
8
9
    try {
        const { id, password } = req.body;
        //사용자 존재 확인
        const user = await User.scope("withPassword").findOne({ where: { userId: id } });
한규민's avatar
push    
한규민 committed
10
        console.log("user : ", user);
한규민's avatar
한규민 committed
11
12
13
        if (!user) {
            return res.status(422).send(`사용자가 존재하지 않습니다`);
        }
한규민's avatar
한규민 committed
14
        // 2) 비밀번호 확인은 데이터베이스 프로토타입 메소드에서 처리(사용자가 입력한 비밀번호와 서버에 있는 비번 비교)
한규민's avatar
한규민 committed
15
16
17
        const passwordMatch = await user.comparePassword(password);
        if (passwordMatch) {
            // 3) 비밀번호가 맞으면 토큰 생성
한규민's avatar
push    
한규민 committed
18
19
            const userRole = await user.getRole();
            console.log("userRole : ", userRole);
한규민's avatar
한규민 committed
20
            const signData = {
한규민's avatar
context    
한규민 committed
21
                userId: user.userid,
한규민's avatar
push    
한규민 committed
22
                role: userRole.name,
한규민's avatar
한규민 committed
23
24
25
26
27
28
29
30
31
32
33
34
35
36
            };
            const token = jwt.sign(signData, config.jwtSecret, {
                expiresIn: config.jwtExpires,
            });
            // 4) 토큰을 쿠키에 저장
            res.cookie(config.cookieName, token, {
                maxAge: config.cookieMaxAge,
                path: "/",
                httpOnly: config.env === "production",
                secure: config.env === "production",
            });
            // 5) 사용자 반환
            res.json({
                userId: user.id,
한규민's avatar
context    
한규민 committed
37
                role: userRole.name,
한규민's avatar
한규민 committed
38
39
40
41
42
43
44
45
46
47
48
49
            });
        } else {
            // 6) 비밀번호 불일치
            res.status(401).send("비밀번호가 일치하지 않습니다");
        }
    } catch (error) {
        console.error(error);
        return res.status(500).send("로그인 에러");
    }

}

Jiwon Yoon's avatar
Jiwon Yoon committed
50
51
const logout = async (req, res) => {
    try {
한규민's avatar
context    
한규민 committed
52
        res.cookie()
Jiwon Yoon's avatar
Jiwon Yoon committed
53
    } catch (error) {
한규민's avatar
context    
한규민 committed
54
55
        console.error(error);
        return res.status(500).send("로그인 에러");
한규민's avatar
push    
한규민 committed
56
    }  }
한규민's avatar
context    
한규민 committed
57

Jiwon Yoon's avatar
Jiwon Yoon committed
58
}
한규민's avatar
한규민 committed
59
60
const compareId = async (req, res) => {
    const id = req.params.userId;
Jiwon Yoon's avatar
Jiwon Yoon committed
61
62
    const userid = await User.findOne({ where: { userId: id } });
    if (userid !== null) {
한규민's avatar
한규민 committed
63
        return res.json(true);
Jiwon Yoon's avatar
Jiwon Yoon committed
64
    } else {
한규민's avatar
한규민 committed
65
66
67
68
        return res.json(false);
    }
}

한규민's avatar
한규민 committed
69
70
71
72
73
const signup = async (req, res) => {
    const { userId, userNickName, userBirthday, userPassword } = req.body;
    // 휴대폰 중복 확인
    const userMbnum = String(req.body.userMbnum);
    try {
Jiwon Yoon's avatar
Jiwon Yoon committed
74
        const mbnum = await User.findOne({ where: { phoneNumber: userMbnum } });
한규민's avatar
한규민 committed
75
76
77
        if (mbnum) {
            return res.status(422).send(`이미 있는 휴대폰번호입니다.`);
        }
Jiwon Yoon's avatar
Jiwon Yoon committed
78
        const role = await Role.findOne({ where: { name: "user" } })
한규민's avatar
한규민 committed
79
80
81
82
83
        const newUser = await User.create({
            userId: userId,
            nickname: userNickName,
            birth: userBirthday,
            phoneNumber: userMbnum,
한규민's avatar
한규민 committed
84
85
            password: userPassword,
            roleId: role.id
한규민's avatar
한규민 committed
86
87
88
89
90
91
92
93
94
        });
        res.json(newUser);
    } catch (error) {
        console.error(error.message);
        res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요");
    }
};


한규민's avatar
한규민 committed
95
export default {
한규민's avatar
한규민 committed
96
    login,
한규민's avatar
push    
한규민 committed
97
    logout,
한규민's avatar
한규민 committed
98
99
    compareId,
    signup
한규민's avatar
한규민 committed
100
}