验证静态路径,nodejs表示护照html

时间:2017-04-22 08:11:38

标签: html node.js express passport.js

我对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
});

1 个答案:

答案 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');
});