express / node js中的多个basic-auth

时间:2018-04-16 09:07:18

标签: javascript http express authentication basic-authentication

我正在尝试实施受基本HTTP身份验证保护的Web应用程序,我设法让它在整个项目中运行,但我想在我的应用程序的路由中执行多种级别的区分。我需要将我的应用程序的一部分留在该身份验证之外,例如部分(/ public /:user)和第二部分,包含一些API(/ API / android / some1或/ API / android / some2)进行通信使用Android应用程序我想通过第二级身份验证来保护它。是否有可能做到这一点? 我读了一下并尝试了但是我遇到了一些错误。我在 app.js 中用于基本身份验证的功能如下:

...
app.use(function(req, res, next){
 var user = auth(req);

 if (user === undefined || user['name'] !== process.env.BASIC_USR || user['pass'] !== process.env.BASIC_PSW) {
    res.statusCode = 401;
    res.setHeader('WWW-Authenticate', 'Basic realm="NodeJS"');
    res.end('Access denied');
 } else {
    next();
 }
});
// index
app.get('/', routes.index);

// home    
app.get('/home', home.view);
...

据我所知,当我使用此函数时,下一个路由器的整个部分都受basic-auth保护,但是只要我在下一部分插入第二部分,稍后在app.js的代码中我就有了以下内容:

...
app.use(function(req, res, next){
 var user = auth(req);

 if (user === undefined || user['name'] !== process.env.DROID_USR || user['pass'] !== process.env.DROID_PSW) {
    res.statusCode = 401;
    res.setHeader('WWW-Authenticate', 'Basic realm="NodeJS"');
    res.end('Access denied');
 } else {
    next();     
 }
});

// API app android 
app.get('/API/get1', get.one);
app.get('/API/get2',get.two);

一旦我登录了我的一个API,就会不断询问我的凭据,而无需访问API结果(显示来自mysql数据库的数据)。此外,我试图在我的家(/ home)之前移动我要公开的部分(/ public /:user),但这显示了一个错误。当我尝试访问我的家(/ home)时,因为我在我的应用程序的公共部分(/ public /:user)中有一个动态URL,其中用户根据用户数量进行更改,并且此数字也在代码告诉我这个变量没有定义,但我现在还没有访问我应用程序的这个公共部分。

我有两个问题需要提出:

1)如何在两个或更多级别上最好地实现此身份验证?

2)我如何从全局身份验证中排除我想要公开的路由部分?

0 个答案:

没有答案