user.controller.js 5.85 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
            const userRole = await user.getRole();
한규민's avatar
한규민 committed
19
20
21
22
            // const userId = await user.getId();
            console.log("userRole1111 : ", userRole);
            // console.log("userId : ", userId);

한규민's avatar
한규민 committed
23
            const signData = {
한규민's avatar
한규민 committed
24
                id: user.id,
한규민's avatar
푸시    
한규민 committed
25
                nickName: user.nickname,
한규민'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
푸시    
한규민 committed
43
                nickName: user.nickname,
한규민's avatar
context    
한규민 committed
44
                role: userRole.name,
한규민's avatar
한규민 committed
45
46
47
48
49
50
51
52
53
54
55
56
            });
        } else {
            // 6) 비밀번호 불일치
            res.status(401).send("비밀번호가 일치하지 않습니다");
        }
    } catch (error) {
        console.error(error);
        return res.status(500).send("로그인 에러");
    }

}

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

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

한규민's avatar
한규민 committed
78
79
80
81
const confirmMbnum = async (req, res) => {
    const id = req.params.id;
    const token = req.params.token;

한규민's avatar
한규민 committed
82
83
84
85
86
87
88
89
90
91
    // 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));
한규민's avatar
한규민 committed
92
    // console.log("id = ", id, "token = ", token);
한규민's avatar
한규민 committed
93
    res.json(true);
한규민's avatar
한규민 committed
94
95
}

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

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

한규민's avatar
한규민 committed
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
const modifyUser = async (req, res) => {
    const { userEmail, userNickName, userMbnum, userPassword, userRePassword } = req.body;
    // 휴대폰 중복 확인
    try {
        const emailOverlap = await User.findOne({ where: { email: userEmail } });
        console.log("emailOverlap :  ",emailOverlap);
        if (emailOverlap) {
            return res.status(422).send(`이미 있는 이메일입니다.`);
        }else{
            const user = await User.findOne({ where: { password: userPassword } });
            console.log("user", user);
            user.email = userEmail;
            user.nickname = userNickName;
            user.phoneNumber = userMbnum;
            user.password = userRePassword;
            await user.save({ fields: ['email'] });
            await user.reload();
        }
        
        res.clearCookie(config.cookieName);
        res.cookie(config.cookieName, token, {
            maxAge: config.cookieMaxAge,
            path: "/",
            httpOnly: config.env === "production",
            secure: config.env === "production",
        });
        res.send('successfully cookie cleared.')
    } catch (error) {
        console.error(error.message);
        res.status(500).send("수정 에러. 나중에 다시 시도 해주세요");
    }
};

한규민's avatar
한규민 committed
166
export default {
한규민's avatar
한규민 committed
167
    login,
한규민's avatar
push    
한규민 committed
168
    logout,
한규민's avatar
한규민 committed
169
    compareId,
한규민's avatar
한규민 committed
170
171
    confirmMbnum,
    signup,
한규민's avatar
한규민 committed
172
173
    getNickName,
    modifyUser
한규민's avatar
한규민 committed
174
}