auth.controller.js 2.5 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
const login = async (req, res) => {
    const { id, password } = req.body
이재연's avatar
이재연 committed
8
9

    console.log(req.body)
10
    try {
이재연's avatar
이재연 committed
11
12
        const user = await User.findOne({role:"user",id:id}).select('password name')

13
        console.log('u=', user)
14
        if (!user) {
이재연's avatar
이재연 committed
15
            return res.status(404).send(`${user.id}가 존재하지 않습니다.`)
이재연's avatar
이재연 committed
16
        }
17
18
19
20
        const passwordMatch = await bcrypt.compare(password, user.password)
        if (passwordMatch) {
            const token = jwt.sign({ userId: user._id }, config.jwtSecret, {
                expiresIn: '3d'
이재연's avatar
이재연 committed
21
            })
22
23
24
25
            res.cookie('token', token, {
                maxAge: config.cookieMaxAge,
                httpOnly: true,
                secure: config.env === 'production'
이재연's avatar
이재연 committed
26
            })
27
            res.json({ userId: user._id, role: user.role, name: user.name })
이재연's avatar
0115    
이재연 committed
28

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

이재연's avatar
이재연 committed
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const admin = (req, res) => {
    try {
        res.json(admin)
    } catch (error) {
        res.status(500).send('다시 시도하세요.')
    }
}

const adminId = async (req, res, next, admin) => {
    try {
        const admin = await User.findOne({ role: "admin" }).select('id password role name')
        console.log('a=',admin)
        if (!admin) {
            res.status(404).send(`${id}가 존재하지 않습니다.`)
        }
        const adminpasswordMatch = await bcrypt.compare(password, admin.password)

        if (adminpasswordMatch) {
            const token = jwt.sign({ adminId: admin.id }, config.jwtSecret, {
                expiresIn: '3d'
            })
            res.cookie('token', token, {
                maxAge: config.cookieMaxAge,
                httpOnly: true,
                secure: config.env === 'production'
            })
            res.json({ adminId: admin.id, role: admin.role, name: admin.name })
        }else {
            res.status(401).send('비밀번호가 일치하지 않습니다.')
        }
        req.admin = admin
        next()
    } catch (error) {
        res.status(500).send('로그인 실패. 다시 시도하세요.')
    }
}

75
76
77
78
const logout = (req, res) => {
    res.clearCookie('token')
    res.send('로그아웃 되었습니다.')
}
이재연's avatar
이재연 committed
79

이재연's avatar
이재연 committed
80
81

export default { login, logout, admin, adminId }