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

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

이재연's avatar
이재연 committed
37
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
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('로그인 실패. 다시 시도하세요.')
    }
}

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

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

export default { login, logout, admin, adminId }