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

Jiwon Yoon's avatar
Jiwon Yoon committed
6
const login = async (req, res) => {
한규민's avatar
한규민 committed
7
8
9
10
    try {
        const { id, password } = req.body;
        //사용자 존재 확인
        const user = await User.scope("withPassword").findOne({ where: { userId: id } });
한규민's avatar
push    
한규민 committed
11
        console.log("user : ", user);
한규민's avatar
한규민 committed
12
13
14
        if (!user) {
            return res.status(422).send(`사용자가 존재하지 않습니다`);
        }
한규민's avatar
한규민 committed
15
        // 2) 비밀번호 확인은 데이터베이스 프로토타입 메소드에서 처리(사용자가 입력한 비밀번호와 서버에 있는 비번 비교)
한규민's avatar
한규민 committed
16
17
18
        const passwordMatch = await user.comparePassword(password);
        if (passwordMatch) {
            // 3) 비밀번호가 맞으면 토큰 생성
한규민's avatar
push    
한규민 committed
19
            const userRole = await user.getRole();
한규민's avatar
한규민 committed
20
21
22
23
            // const userId = await user.getId();
            console.log("userRole1111 : ", userRole);
            // console.log("userId : ", userId);

한규민's avatar
한규민 committed
24
            const signData = {
한규민's avatar
한규민 committed
25
                id: user.id,
한규민's avatar
push    
한규민 committed
26
                role: userRole.name,
한규민's avatar
한규민 committed
27
            };
한규민's avatar
한규민 committed
28
            console.log("signData :  ", signData);
한규민's avatar
한규민 committed
29
30
31
            const token = jwt.sign(signData, config.jwtSecret, {
                expiresIn: config.jwtExpires,
            });
한규민's avatar
한규민 committed
32
            console.log(token);
한규민's avatar
한규민 committed
33
34
35
36
37
38
39
40
41
            // 4) 토큰을 쿠키에 저장
            res.cookie(config.cookieName, token, {
                maxAge: config.cookieMaxAge,
                path: "/",
                httpOnly: config.env === "production",
                secure: config.env === "production",
            });
            // 5) 사용자 반환
            res.json({
한규민's avatar
한규민 committed
42
                id: user.id,
한규민's avatar
context    
한규민 committed
43
                role: userRole.name,
한규민's avatar
한규민 committed
44
45
46
47
48
49
50
51
52
53
54
55
            });
        } else {
            // 6) 비밀번호 불일치
            res.status(401).send("비밀번호가 일치하지 않습니다");
        }
    } catch (error) {
        console.error(error);
        return res.status(500).send("로그인 에러");
    }

}

Jiwon Yoon's avatar
Jiwon Yoon committed
56
57
const logout = async (req, res) => {
    try {
한규민's avatar
한규민 committed
58
        res.cookie(config.cookieName,"")
Jiwon Yoon's avatar
Jiwon Yoon committed
59
    } catch (error) {
한규민's avatar
context    
한규민 committed
60
61
        console.error(error);
        return res.status(500).send("로그인 에러");
한규민's avatar
한규민 committed
62
    }
Jiwon Yoon's avatar
Jiwon Yoon committed
63
}
한규민's avatar
한규민 committed
64

한규민's avatar
한규민 committed
65
66
const compareId = async (req, res) => {
    const id = req.params.userId;
Jiwon Yoon's avatar
Jiwon Yoon committed
67
68
    const userid = await User.findOne({ where: { userId: id } });
    if (userid !== null) {
한규민's avatar
한규민 committed
69
        return res.json(true);
Jiwon Yoon's avatar
Jiwon Yoon committed
70
    } else {
한규민's avatar
한규민 committed
71
72
73
74
        return res.json(false);
    }
}

한규민's avatar
한규민 committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const confirmMbnum = async (req, res) => {
    const id = req.params.id;
    const token = req.params.token;

    const client = Twilio(id, token);
    // console.log(client);
    client.messages
        .create({
            to: '+8201086074580',
            from: '+14159428621',
            body: '[ButterStudio] 인증번호[1234]를 입력해주세요',
        })
        .then(message => console.log(message.sid))
        .catch(e => console.log(error));
    // console.log("id = ", id, "token = ", token);
    return res.json(true);
}

한규민's avatar
한규민 committed
93
const signup = async (req, res) => {
한규민's avatar
한규민 committed
94
    const { userId, userEmail, userNickName, userBirthday, userPassword } = req.body;
한규민's avatar
한규민 committed
95
96
97
    // 휴대폰 중복 확인
    const userMbnum = String(req.body.userMbnum);
    try {
Jiwon Yoon's avatar
Jiwon Yoon committed
98
        const mbnum = await User.findOne({ where: { phoneNumber: userMbnum } });
한규민's avatar
한규민 committed
99
100
101
        if (mbnum) {
            return res.status(422).send(`이미 있는 휴대폰번호입니다.`);
        }
한규민's avatar
한규민 committed
102
        const role = await Role.findOne({ where: { name: "member" } })
한규민's avatar
한규민 committed
103
104
        const newUser = await User.create({
            userId: userId,
한규민's avatar
한규민 committed
105
            email: userEmail,
한규민's avatar
한규민 committed
106
107
108
            nickname: userNickName,
            birth: userBirthday,
            phoneNumber: userMbnum,
한규민's avatar
한규민 committed
109
110
            password: userPassword,
            roleId: role.id
한규민's avatar
한규민 committed
111
112
113
114
115
116
117
118
        });
        res.json(newUser);
    } catch (error) {
        console.error(error.message);
        res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요");
    }
};

한규민's avatar
한규민 committed
119
120
121
122
123
124
125
126
127
128
129
130
131
const getNickName = async (req, res) => {
    console.log("여기여기");
    const id = req.params.id;
    console.log("id  :  ", id);
    try {
        const userNickName = await User.findOne({ where: { id: id }, attributes:["nickname"] });
        console.log("userNickName:    ", userNickName);
        return res.json(userNickName.nickname)
    } catch (error) {
        console.error("error :      ",error.message);
        res.status(500).send("회원가입 에러. 나중에 다시 시도 해주세요");
    }
}
한규민's avatar
한규민 committed
132

한규민's avatar
한규민 committed
133
export default {
한규민's avatar
한규민 committed
134
    login,
한규민's avatar
push    
한규민 committed
135
    logout,
한규민's avatar
한규민 committed
136
    compareId,
한규민's avatar
한규민 committed
137
138
139
    confirmMbnum,
    signup,
    getNickName
한규민's avatar
한규민 committed
140
}