所以我在 youtube 上關注一個 web 開發專案教程。
他們創建了兩個中間件,verifyToken 和 verifyUser。
`verifyToken`
const verifyToken = (req, res, next) => {
const token = req.cookies.access_token;
if (!token) {
return next(createError(401, "You are not authenticated!"));
}
jwt.verify(token, process.env.JWT, (err, user) => {
if (err) return next(createError(403, "invalid token!"));
req.user = user;
next();
});
};
`verifyUser`
const verifyUser = (req, res, next) => {
verifyToken(req, res, () => {
if (req.user.id === req.params.id || req.user.isAdmin) {
next();
} else {
return next(createError(403, "invalid user!"));
}
});
};
VerifyToken檢查 access_token 是否有效,verifyUser驗證登錄用戶是否附加了正確的 access_token。現在我知道要驗證用戶,您需要首先檢查令牌是否有效。這就是我們在 verifyUser 中呼叫 verifyToken 的原因。但是有人可以向我解釋一下回呼函式是如何被呼叫的嗎?難道我們不需要在verifyUser函式的最后呼叫回呼函式嗎?
uj5u.com熱心網友回復:
next您在傳遞給的回呼中呼叫的函式verifyToken實際上屬于該verifyUser方法。所以verifyUser()=> verifyToken()=> next() // of verifyToken=> next() // of verifyUser。
我假設你使用一些 nodejs 服務器框架,比如 Expressjs 或類似的。一般來說,您應該將它們排成一行,讓框架按順序執行它們并next為您傳遞回呼,例如
app.get('/protected-api', verifyToken, verifyUser)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529996.html
