auth.controller.js 1.32 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
        console.log('u=', user)
11
        if (!user) {
이재연's avatar
이재연 committed
12
            return res.status(404).send(`${id}가 존재하지 않습니다.`)
이재연's avatar
이재연 committed
13
        }
14
15
16
17
        const passwordMatch = await bcrypt.compare(password, user.password)
        if (passwordMatch) {
            const token = jwt.sign({ userId: user._id }, config.jwtSecret, {
                expiresIn: '3d'
이재연's avatar
이재연 committed
18
            })
19
20
21
22
            res.cookie('token', token, {
                maxAge: config.cookieMaxAge,
                httpOnly: true,
                secure: config.env === 'production'
이재연's avatar
이재연 committed
23
            })
Jiwon Yoon's avatar
Jiwon Yoon committed
24
            res.json({ userId: user._id, role: user.role, name: user.name, tel: user.tel, email:user.email })
이재연's avatar
0115    
이재연 committed
25

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

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

이재연's avatar
이재연 committed
40

41
export default { login, logout }