javascript 使用身份验证中间件来表达资源?

pw9qyyiw  于 2023-05-27  发布在  Java
关注(0)|答案(6)|浏览(166)

Passport.js为node.js和Express提供了强大的身份验证,包括中间件解决方案:

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

如何在express-resource模块中使用此中间件?不幸的是

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

不管用。

x7rlezfr

x7rlezfr1#

我知道这有点太晚了,原来的帖子得到了回答,然而,我正在寻找同样的答案,并找到了一个我认为其他人可能想知道的解决方案。
只要确保从passport调用Authenticated即可。

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

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

uqzxnwby

uqzxnwby2#

解决办法。确保对所有请求进行身份验证,并忽略转到/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));
  }
});
bvk5enib

bvk5enib3#

您将需要使用一些魔法来让每个资源使用身份验证中间件。下面的要点解释如何通过使用菜单结构来实现这一点。
https://gist.github.com/3610934
基本上,您需要以下逻辑:

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

然后,您可以在菜单结构中指定哪些资源受到保护,以及它们是否需要任何类型的特定权限,甚至到HTTP方法级别。
希望这对某人有帮助!

vmpqdwk3

vmpqdwk34#

我不确定express-resource是否有将中间件插入到特定资源中的选项,但您可以始终插入检查您是否在中间件内的资源中。

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

laik7k3q5#

这个方法的作用是:
app.get('/',ensureAuthenticated,admin.index);
只要你的策略正确。我用的是本地策略。查看指南:
http://passportjs.org/guide/username-password.html

evrscar2

evrscar26#

我也在查这个主题,找到了https://npmjs.org/package/express-resource-middleware。不过,还没测试过。

相关问题