auth.controller.js 1.24 KB
Newer Older
이재연's avatar
이재연 committed
1
2
3
4
5
import User from '../schemas/User.js'
import bcrypt from 'bcryptjs'
import jwt from 'jsonwebtoken'
import config from '../config.js'

6
7
8
const login = async (req, res) => {
    const { id, password } = req.body
    try {
Jiwon Yoon's avatar
Jiwon Yoon committed
9
        const user = await User.findOne({ id }).select('password role name tel email')
10
        if (!user) {
이재연's avatar
이재연 committed
11
            return res.status(404).send(`${id}가 존재하지 않습니다.`)
이재연's avatar
이재연 committed
12
        }
13
14
15
16
        const passwordMatch = await bcrypt.compare(password, user.password)
        if (passwordMatch) {
            const token = jwt.sign({ userId: user._id }, config.jwtSecret, {
                expiresIn: '3d'
이재연's avatar
이재연 committed
17
            })
18
19
20
21
            res.cookie('token', token, {
                maxAge: config.cookieMaxAge,
                httpOnly: true,
                secure: config.env === 'production'
이재연's avatar
이재연 committed
22
            })
Kim, Subin's avatar
정리    
Kim, Subin committed
23
            res.json({ userId: user._id, role: user.role })
이재연's avatar
0115    
이재연 committed
24

25
        } else {
이재연's avatar
이재연 committed
26
            res.status(401).send('비밀번호가 일치하지 않습니다.')
이재연's avatar
이재연 committed
27
        }
28
    } catch (error) {
이재연's avatar
이재연 committed
29
        console.log(error)
이재연's avatar
이재연 committed
30
        res.status(500).send('로그인 실패. 다시 시도하세요.')
이재연's avatar
이재연 committed
31
32
33
    }
}

34
35
36
37
const logout = (req, res) => {
    res.clearCookie('token')
    res.send('로그아웃 되었습니다.')
}
이재연's avatar
이재연 committed
38

39
export default { login, logout }