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 + "!");
});
我正在按照教程创建我的第一个带护照的登录系统,我 运行 遇到了护照 '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 + "!");
});