我正在按照教程创建我的第一个带护照的登录系统,而且我遇到了护照问题'基本'策略。
问题是我的代码根本不会阻止/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'));
奇怪的是它在我第一次运行时工作,但之后它没有,所以我想知道在我的代码中是否存在其他问题。
任何有关错误的建议都会受到赞赏。
答案 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 + "!");
});