HTTP 身份验证不适用于 passport-http

HTTP authentication not working with passport-http

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

问题是我的代码根本不阻止进入 /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'));

奇怪的是它在我第一次 运行 它时起作用,但之后它就不起作用了,所以我想知道除了我的代码之外其他地方是否存在问题。

如有任何错误建议,我们将不胜感激。

我想我知道会发生什么。

您的浏览器正在缓存用户名和密码。尝试用 Chrome 打开隐身 window,然后打开那个 url。它应该会再次询问您密码。

AFAIK Chrome 仅在关闭时清除缓存的 HTTP 身份验证。所以你应该为每个测试打开和关闭隐身 windows...

作为替代方案,我建议使用 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 + "!");
});