簡體   English   中英

用身份驗證中間件來表達資源?

[英]Express resources with authentication middleware?

Passport.js為node.js和Express提供了很好的身份驗證,包括一個中間件解決方案:

ensureAuthenticated = function(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  return res.redirect("/login");
};

如何在快速資源模塊中使用此中間件? 不幸,

app.resource('users', ensureAuthenticated, require('./resources/users'));

不起作用。

我知道這有點太晚了,原來的帖子得到了解答,但是,我正在尋找相同的答案並找到了我認為其他人可能想知道的解決方案。

只需確保從護照中調用ensureAuthenticated即可。

    app.resource('users', passport.ensureAuthenticated, require('./resources/users'));

它在這里找到: https//gist.github.com/1941301

解決方法。 確保對所有請求進行身份驗證,並忽略進入/ auth和/ auth / callback的請求。

app.all('*', function(req, res, next) {
  if (/^\/auth/g.test(req.url)) {
    return next();
  } else if (req.isAuthenticated()) {
    return next();
  } else {
    return next(new Error(401));
  }
});

為了讓每個資源都使用身份驗證中間件,您需要做一些魔術。 以下要點解釋了如何通過使用菜單結構來實現此目的。

https://gist.github.com/3610934

基本上,您需要以下邏輯:

app.all('/' + item.name + '*', ensureAuthenticated, function (req, res, next) {
  next();
});

然后,您可以在菜單結構中指定受保護的資源,以及它們是否需要任何類型的特定權限,甚至可以指向HTTP方法級別。

希望這有助於某人!

我也在查找這個主題,並找到了https://npmjs.org/package/express-resource-middleware 但是沒有測試過。

我不確定express-resource是否可以選擇將中間件插入特定資源,但是如果您在中間件內的資源中,則可以隨時插入檢查。

ensureAuthenticated = function(req, res, next) {
  if (!/^users/.test(req.url) || req.isAuthenticated()) {
    return next();
  }
  return res.redirect("/login");
};

這有效:

app.get('/',ensureAuthenticated,admin.index);

只要您的策略設置正確。 我正在使用本地策略。 查看指南:

http://passportjs.org/guide/username-password.html

暫無
暫無

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

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