2016-06-21 55 views
0

我的服務器有一個註冊api,它在註冊後提供一個令牌,還有一個對用戶令牌進行認證的中間件。我需要註冊一個帳戶才能讓令牌與我的服務器執行其他操作。但是,中間件阻止了我的網絡請求,因爲我還沒有令牌。Express Middleware jsonwebtoken認證

那麼如何在這種情況下創建我的帳戶和令牌?用一些技巧來傳遞中間件?

中間件:

// Middleware to verify token, it will be called everytime a request is sent to API 
    api.use((req, res, next)=> { 
    var token = req.headers.token 
    if (token) { 
     jwt.verify(token, secret, (err, decoded)=> { 
     if (err) { 
      res.status(403).send({ success: false, message: "Failed to authenticate user." }) 
     } else { 
      req.decoded = decoded 
      next() 
     } 
     }) 
    } else { 
     res.status(403).send({ success: false, message: "No Token Provided." }) 
    } 
    }) 

簽到:

// Sign In with email API 
    api.post('/signInWithEmail', (req, res)=> { 
    User.findOne({ 
     email: req.body.email 
    }).select(userFields).exec((err, user)=> { 
     if(err) { 
     throw err 
     } 
     if (!user) { 
     res.send({ message: "User doesn't exist"}); 
     } else if (user) { 
     var validPassword = user.comparePassword(req.body.password); 
     if (!validPassword) { 
      res.send({ message: "Invalid Password"}); 
     } else { 
      var token = createToken(user); 
      res.json({ 
      success: true, 
      message: "Login Successfully!", 
      token: token 
      }) 
     } 
     } 
    }) 
    }) 
+1

爲什麼你不使用護照呢? –

回答

0

做一個函數來檢查令牌暴露你的路線,例如,每當你需要調用經過身份驗證的路線,那麼你就可以檢查令牌首先,然後你會暴露路線。

示例代碼

比方說,這是我的檢查令牌功能

function checkToken(req, res, next) { 
var x = req.token; //This is just an example, please send token via header 
    if (x === token) 
    { 
     next(); 
    } 
    else 
    { 
     res.redirect(/unauthorized); //here do whatever you want to do 
    } 
    } 

現在讓我們使用功能的途徑。

app.post('/protectedroute', checkToken, routename.functionname); 
app.post('/notprotected', routename.functionname); 

這是你的電話,如果你想有不同的代碼不同的途徑,否則你可以通過讓他們在功能等對主文件即app.jsserver.js調用特定的代碼塊,不管你有選擇。

實際上我們在這裏做的是 - 我們正在製作一個我們自己的中間件,通過一個代碼塊或函數的通道來展示我們的路線。

+0

這種方式有效!謝謝 – thousight

+0

不客氣。 –

相關問題