【问题标题】:is verifying a JWT efficient for being used in middleware?验证 JWT 是否可以有效地用于中间件?
【发布时间】:2019-03-30 06:05:33
【问题描述】:

我有一个节点反应项目,我需要知道传入请求的状态,因此我在任何路由之前放置了一个中间件。我想知道.verify的复杂度是多少 因为在服务器端,我有一个中间件,将在每个请求中到达服务器。这是中间件:

const jsonwebtoken = require('jsonwebtoken');
module.exports = ('/', (req,res,next)=>{ 

    if(req.cookies){
        if(req.cookies.token){
            let decoded = '' ; 
            try{
                decoded = jsonwebtoken.verify(req.cookies.token, 'this is the secret');
                req.user = decoded ; 
                req.isTokenValid = true ; 
            }catch(err){
                console.log('we got error, verifying the jwt:::', err);
                req.hasToken = true ; 
                req.isTokenValid = false ;
            }
        }
        else{
            req.hasToken = false ;
            req.isTokenValid = false ; 
        }

    }
    else{
        console.log('else for nothing in cookies');
        req.hasToken = false;  
        req.hasValidToken = false ;  
    }
    next();
})

正如您在每个请求中看到的那样,我将验证令牌,这是一种同步方法。

问题来了,这种方法是否有效?或者我应该把这段代码放在一个特定的路径而不是一个中间件?还是别的什么?

谢谢

【问题讨论】:

    标签: node.js reactjs jwt


    【解决方案1】:

    这就是中间件的目的,可重用。确保将它包含在您希望拥有经过验证的令牌的任何路由中。

    虽然您可以将验证方法放在app.use 中,但它可以验证所有路由。您仍然希望在您的身份验证路由之前声明登录/密码重置路由。否则,用户将很难登录或重置忘记的密码:)

    【讨论】:

    • 感谢您的反馈,但是我不明白您回答的这一部分:您仍然希望在您的身份验证路由之前声明登录/密码重置路由。否则,用户将很难登录或重置忘记的密码,因为我没有将密码保存在 jwts 中。
    • app.post('/login', etc) & app.post('/paswordReset', etc)app.use(checkToken) 中间件之前然后你可以把你所有的app.get('/protectedRoutes, etc) 放在之后
    猜你喜欢
    • 2018-11-18
    • 2019-02-26
    • 2019-02-17
    • 2018-09-28
    • 2019-10-21
    • 2018-06-17
    • 2017-09-02
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多