
과거 나는 회원가입, 로그인 부분이 정말 어려운지 알았다. 암호화부터 해서 유효성 등 확인해야할 것이 많다고 생각했다. 하지만 NodejS 의 유용한 패키지 덕에 크게 어렵지 않게 구현할 수 있었다. 물론 깊게 해쉬를 배우려면 어렵겠지만...
const join = async (req, res) => {
    const {username, password, confirmpassword, name, phone_number} = req.body;
    
    if (password != confirmpassword) {
        return res.status(409).json({message: "비밀번호가 틀립니다"});
    }
    
    const existingUser = await User.exists({id: username});
    if (existingUser) {
        return res
            .status(409)
            .json({message: "아이디 혹은 닉넴이이 이미 사용중입니다."});
    }
    
    const newPassword = await bcrypt.hash(password, config.bcrypt.salt);
    
    try {
        const user = await User.create({
            id: username,
            password: newPassword,
            name,
            phone_number,
        });
        const token =jwt.sign(user.id, config.jwt.secretKey, {
        expiresIn: config.jwt.expireInSec,
    });
        return res.status(200).json(token);
        
    } catch (error) {
        console.error(error);
        res.json({message: error});
    }
};

const login = async (req, res, next) => {
    const {username, password} = req.body;
    const user = await User.findOne({id: username});
    if (!user) {
        return res.status(401).json({message: "없는 아이디입니다."});
    }
    
    const ok = await bcrypt.compare(password, user.password);
    if (!ok) {
        return res.status(401).json({message: "비밀번호가 틀려요."});
    }
    const token = createJwt(user.id);
    req.headers.token = token;
    
    return res.json({token});
};
const auth = async (req, res, next) => {
    const token = req.get("token");
    
    if (!token) {
        return res.status(401).json(AUTH_ERROR);
    }
    jwt.verify(token, config.jwt.secretKey, async (error, decoded) => {
        if (error) {
            return res.status(401).json(AUTH_ERROR);
        }
        const user = await User.findOne({id: decoded.id});
        if (!user) {
            return res.status(401).json(AUTH_ERROR);
        }
        req.id = user.id;
        next();
    });
};Auth 부분을 구현하면서 json 을 보내줄때 키값을 Message 와 Error를 나눠 보냈다.
그 후 프론트 하는 친구에게 키 값을 동일하게 해달라는 요청을 받았다.
프론트 쪽을 고려하지 않았던 것이고, "협업이 무엇인가?" 를 다시 한번 생각하게 되었다.