user.js 2.33 KB
const express = require('express');
const router = express.Router();
const bcrypt = require('bcrypt');
const passport = require('passport');
const {isLoggedIn, isNotLoggedIn} = require("./middleware");
const models = require('../models/index');

router.post('/signUp', isNotLoggedIn, async (req, res, next) => {
    try {
        const {email, password, nickName} = req.body;
        let user = await models.User.findOne({where: {email}});
        if (user) {
            return res.status(401).json({info: '중복된 이메일입니다'});
        }
        user = await models.User.findOne({where: {nickName}});
        if (user) {
            return res.status(401).json({info: '중복된 닉네임입니다'});
        }

        const hashedPassword = await bcrypt.hash(password, 10);
        await models.User.create({
            email, hashedPassword, nickName
        });

        return res.json({info: '회원가입 완료. 로그인 하세요'});
    } catch (e) {
        console.error(e);
        next(e);
    }
});
router.post('/login', isNotLoggedIn, (req, res, next) => {
    passport.authenticate('local', {}, (err, user, info) => {
        if (err) {
            console.error(err);
            return next(err);
        }
        if (info) {
            return res.status(401).json({info});
        }
        req.login(user, (err) => {
            if (err) {
                console.error(err);
                return next(err);
            }
            return res.json({user});
        });
    })(req, res, next);
});
router.get('/loadMe', isLoggedIn, (req, res, next) => {
    try {
        return res.json({user: req.user});
    } catch (e) {
        console.error(e);
        next(e);
    }
});
router.post('/updateUserInfo', isLoggedIn, async (req, res, next) => {
    try {
        const {nickName} = req.body;

        await models.User.update({
            nickName
        }, {
            where: {id: req.user.id}
        });

        const user = await models.User.findOne({where: {id: req.user.id}});

        return res.json({user});
    } catch (e) {
        console.error(e);
        next(e);
    }
});
router.get('/logout', isLoggedIn, (req, res, next) => {
    try {
        req.logout();
        req.session.destroy();
        return res.json({});
    } catch (e) {
        console.error(e);
        next(e);
    }
});

module.exports = router;