簡體   English   中英

在PassportJS中提出自定義錯誤

[英]Prorogate a custom error in PassportJS

我正在嘗試重構現有的應用程序,以增加對PassportJS的支持,但是它比預期的要困難得多。

我正在使用passport-jwt作為策略。 所以我有

passport.use(new JwtStrategy(options, user.verify));

router.post(
  '/login/jwt', 
   passport.authenticate('jwt', {session: false, failWithError: true})
);

並且如果user.verify失敗,它將調用(例如)

done(new Error(errors.BAD_REQUEST));

但是我沒有辦法處理此錯誤,無論我作為完成回調的第一個參數傳遞什么,Passport始終會發送401-未經授權的響應。

這不是我期望的,因為我的代碼庫中有許多錯誤處理程序,並且我想向客戶端傳達有意義的錯誤。

到目前為止,我在Google上搜索了很多東西,除了官方文檔外,我還提出了幾個SO問題,但是這些解決方案都可以解決我的問題。

例如,針對此問題的常見解決方案是使用閉包來訪問req和res對象(如上面的鏈接),但這不適用於我現有的應用程序。

有人能幫我嗎?

因此,我假設您想幫助用戶,例如說密碼不正確。

在“驗證回調”部分中,您可以找到以下示例:

return done(null, false, { message: 'Incorrect password.' });

默認情況下,如果身份驗證失敗,Passport將以401未經授權狀態響應

要捕獲此消息,您可以嘗試執行以下操作: http : //passportjs.org/docs#custom-callback

app.get('/login', function(req, res, next) {
  passport.authenticate('local', function(err, user, info) {
    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  })(req, res, next);
});

這有幫助嗎?


編輯:沒有IIFE

app.post('/login',
  passport.authenticate('local', { failWithError: true }),
  function(req, res, next) {
    // Handle success
    return res.send({ success: true, message: 'Logged in' })
  },
  function(err, req, res, next) {
    // Handle error
    return res.status(401).send({ success: false, message: err })
  }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM