我在应用程序的前端和后端的node.js上使用jquery,bootstrap和html。另外,我正在使用jwt令牌的护照身份验证。这是问题,以登录过程为例;在用户输入他们的登录凭据后,我想使用location.href将用户重定向到仪表板页面,在那里他们可以访问他们的个人信息。问题是我无法在请求中使用承载令牌发送标头信息。我发现文档似乎表明我可以使用access_token参数名称在查询字符串中传递令牌。但是,由于我使用的是路由和友好网址,这会带来一个问题,因为这不是路由引擎所期望的url模式。更不用说它对顶部导航的影响,因为这将迫使我必须将令牌附加到所有导航href的。虽然,这似乎是一个黑客攻击,但是,有什么方法可以在它到达路由之前拦截access_token,执行身份验证检查并从请求中删除access_token或者是否有更好的方法来处理这种情况?
我现在还有另一个问题,我的静态文件现在需要指定令牌;如何排除公用文件夹需要身份验证?
route.js:
module.exports = function(app, model){
app.use("/api/customer", require("./routes/customer")(model));
}
customer controller:
module.exports = function(model){
router.get('/:id', function(req, res, next) {
…….
});
router.post('/', function(req, res, next) {
…….
});
router.put('/id', function(req, res, next) {
…….
});
router.delete('/id', function(req, res, next) {
…….
});
return router;
};
app.js:
app.use(expressJwt({secret: process.env.AUTH_KEY,
//credentialsRequired: false,
getToken: function fromHeaderOrQuerystring (req) {
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer') {
return req.headers.authorization.split(' ')[1];
} else if (req.query && req.query.token) {
return req.query.token;
}
return null;
}}).unless({path: [{ url: '/forgotpassword/', methods: ['GET'] },
{ url: '/api/login', methods: ['POST'] },
{ url: '/login', methods: ['GET'] },
{ url: '/index', methods: ['GET'] },
{ url: '/resetpassword', methods: ['GET'] },
{ url: '/api/resetpassword', methods: ['PUT'] }]} ));