expressでカスタムミドルウェアを使用したことがあります.

8821 ワード

const jwt = require('jsonwebtoken')

const jwtMiddleware = async(req, res, next) => {
    // read the token from header or url 
    const token = req.cookies.token

    try{
    	const decoded = await jwt.verify(token, req.app.get('jwt-secret'))
		req.decoded = decoded        
        next()
    } catch (error) {
    	console.log(error);
        console.log('Unauthorized jwt')
        res.status(401).json(
            '로그인이 필요합니다.'
        )
    }
}

module.exports = jwtMiddleware
これらのミドルウェアはクッキーからtokenを受信し、
  • が無効な場合、「ログインが必要」というメッセージが送信され、
  • が送信される.
  • が有効である場合、next()関数が呼び出されます.
  • このコード.

    このように使うと、よく働いていることがわかります.
    上位2名
    つまり、'/''/login'は、コインがない場合に近づかなければならない.
    上のミドルウェアを通過させないのです.
    大神を踊る👍!
    一番上のコードからいくつか指摘して、ここに記録したいです.

    1. req.app.get('jwt-secret')


    この部分は今回初めて見ました.app.jsからapp.set("jwt-secret", config.secret);というコードがあります
    これはconfig.secretの値を後方に伝達する役割を果たす.

    2. req.decoded = decoded


    これでも後ろから近づくことができます.

    3.new Promiseを使用する方法


    上のコードは少し変形しています.
    const jwt = require('jsonwebtoken')
    
    const authMiddleware = (req, res, next) => {
        // read the token from header or url 
        const token = req.cookies.token
        
        const jwt = new Promise((resolve, reject) => {
                jwt.verify(token, req.app.get('jwt-secret'), (err, decoded) => {
                    if(err) {
                        reject(err);
                    }
                    resolve(decoded)
                })
            }
        )
    
        const onError = (error) => {
            res.status(401).json(
                '로그인이 필요합니다.'
            )
        }
    
        p.then((decoded)=>{
            req.decoded = decoded
            next()
        }).catch(onError)
    }
    
    module.exports = authMiddleware
    これで明確に何かを減らすことができます.