HTTP身份验证不能与passport-http一起使用

时间:2015-05-08 22:07:12

标签: node.js passport.js

我正在按照教程创建我的第一个带护照的登录系统,而且我遇到了护照问题'基本'策略。

问题是我的代码根本不会阻止/api目录中的条目,我不明白为什么。

我的代码如下所示:

var passport = require('passport');
var passportLocal = require('passport-local');
var passportHttp = require('passport-http');

app.use(passport.initialize());
app.use(passport.session());

    passport.use(new passportHttp.BasicStrategy(verifyCredentials));

    function verifyCredentials(username, password, done){
      if (username === password){
        done(null, { id: username, name: username });
      } else {
        done(null, null);
      }
    }

    app.use('/api', passport.authenticate('basic'));

奇怪的是它在我第一次运行时工作,但之后它没有,所以我想知道在我的代码中是否存在其他问题。

任何有关错误的建议都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

我想我知道会发生什么。

您的浏览器正在缓存用户和密码。尝试使用Chrome打开隐身窗口,然后打开该网址。它应该再次问你密码。

AFAIK Chrome仅在关闭时清除缓存的HTTP身份验证。因此,您应该为每个测试打开和关闭隐身窗口......

答案 1 :(得分:0)

作为替代方案,我建议将http-auth与护照整合使用:

// Authentication module.
var auth = require('http-auth');
var basic = auth.basic({
    realm: "Simon Area.",
    file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ...
});

// Application setup.
var app = express();

// Setup strategy.
var passport = require('passport');
passport.use(auth.passport(basic));

// Setup route.
app.get('/', passport.authenticate('http', { session: false }), function(req, res) {
    res.end("Welcome to private area - " + req.user + "!");
});