我对Web开发比较陌生,我正在尝试设置基本身份验证。它适用于非静态路径,但我无法理解静态路径的工作原理。我最近发现,当我使用静态路径... / home.html请求我的身份验证页面(/ home)时,它无论如何都会提供路径。我已经尝试以与我认证/ home相同的方式对其进行身份验证,但是它不起作用,尽管我从控制台日志中看到身份验证失败,因此调用了isAuthenticated。
如果有人能指出正确的方向,我会非常感激,因为我试图了解ask / home和/home.html之间的区别,以便进行正确的身份验证。我还注意到,我在网上访问的大多数网站在浏览它们时没有任何静态路径。因为我知道如何从按钮重定向页面的方法是使用href = / path.html,所以我也在第一次按钮点击后提供静态路径。知道如何提供非静态路径会很好(如果我最后不添加.html,则href = / path不起作用)
可能回答相当简单,但我不知道应该调查哪些词,而且据我所知,我也无法在stackoverflow上找到它。所以请帮我解决这个noob问题。
这是我设置中间件的地方:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(express.static('public'));
app.set('views', __dirname + '/public');
app.engine('html', engines.mustache);
app.set('view engine', 'html');
app.use(require('express-session')({
secret: 'so secret much safety',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
这是我尝试进行身份验证的地方:
function isAuthenticated(request, response, next) {
console.log('isauthenticated:'+request.isAuthenticated());
if (request.isAuthenticated()){return next();}
else{response.redirect('/');}
}
app.use('/home', isAuthenticated, function(request, response){
response.render('home.html');
//response.send('if you are viewing this page it means you are logged in');
});
app.use(express.static(__dirname + '/home'), isAuthenticated, function(request, response){
//should serve the page here
});
答案 0 :(得分:1)
当我尝试将视图移离公共文件夹时,nodejs无法找到它们,但我更改了视图目录。然后我发现从app更改到路由器完全解决了问题。这可能是相当微不足道的,但我花了一些时间来解决问题。如果另一个业余爱好者有同样的问题并最终在这里,以下为我工作:
var router = express.Router();
...
app.set('views', __dirname + '/views');
...
router.use('/home', isAuthenticated, function(request, response){
response.render('home');
});
router.use(express.static(__dirname + '/home'), isAuthenticated, function(request, response){
console.log('it works');
});