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

}

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

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

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

한규민's avatar
한규민 committed
121
122
123
124
125
126
127
128
129
130
131
132
133
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
134

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