FILOTチャットアプリケーション-2(Auth)の作成



FILOTチャットアプリケーション-2(Auth)の作成


npm bcrypt/jsonwebtokenを用いてAuthを実現した。


以前は会員登録を知っていましたが、登録部分は本当に難しいです.暗号化から、有効性を確認する必要があるものが多いと思います.しかし、Nodejsの有用なパッケージのおかげで、実現は難しくない.もちろん、ハッシュを深く学ぶのは難しいですが...

Join


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});
    }
};


Login

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});
};
  • 会員に加入登録する場合、jsonwebtokenを使用してIDタグをrequset Header部分に入れます.
  • JWT

    
    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();
        });
    };
  • Cookieのみを使用しており、tokenを使用するのは初めてで、authをミドルウェアとして使用するのは非常に便利です.
  • Auth部分がjsonを送信することを実装するとき,キー値をメッセージとErrorに分ける.
    その後、フロントの友達にキー値を同じにするように要求されました.
    フロントを考えず、「コラボレーションって何?」もう一度思い出した.