在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由
Posted
技术标签:
【中文标题】在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由【英文标题】:Protect non-api (res.render) route with express-jwt token in Node.js 【发布时间】:2014-10-18 00:00:01 【问题描述】:首先,我已阅读有关使用 jwt(express-jwt 和 jsonwebtoken)保护 REST API 路由的所有教程,并且它可以很好地用于此目的。
这很好用:
app.use('/api', postApiRoute);
这在某种程度上也有效,我的意思是.. 当我使用它显示带有角度 http 请求调用的网页时,它确实验证了令牌,但是当您添加 expressJwt(secret: secret.secretToken)
时,您不能再访问 localhost:3000/api/post
。 expressJwt(secret: secret.secretToken)
是这里的问题。
app.use('/api', expressJwt(secret: secret.secretToken));
app.use('/api', userApiRoute);
我真正需要的是使用 jwt 保护非 json 但 html/文本请求 路由,例如:
app.get('/admin*', expressJwt(secret: secret.secretToken), function(req, res)
res.render('index',
//user: req.session.user, <- not sure how to do the equivalent, to extract the user json-object from the express-jwt token?
js: js.renderTags(),
css: css.renderTags()
);
);
.. 不必在 angular/js 中发出 http 请求,而是使用 express 的渲染功能。
我需要这样做,因为我的应用程序有 2 个主服务器路由视图,其中 1 个用于加载管理脚本,1 个用于加载前端(主题)资产。
但是,我无法让 jwt/tokens 与服务器呈现的视图一起使用,只能使用 json api 请求。
我得到的错误是:“UnauthorizedError: No Authorization header was found”
找不到有关(受 jwt 保护的服务器渲染视图,仅服务器端 api 请求和客户端 angular/ajax http 请求)的任何信息,所以我希望我的问题很清楚,并且我不必回退再次使用会话。
【问题讨论】:
嘿,你有没有得到任何地方?我也在努力解决这个问题。您无法保护简单的 GET 路由似乎很疯狂。如果知道,我在这里有一个问题,我很乐意接受答案。 ***.com/questions/31822234/… 【参考方案1】:不确定我是否理解正确,但如果您在谈论 entry html 路由(即,直接由浏览器加载,而不是由您的 Angular 应用程序加载),那么您根本无法指示浏览器如何设置授权标头(不引入其他一些基于重定向的身份验证流程)。
【讨论】:
以上是关于在 Node.js 中使用 express-jwt 令牌保护非 api (res.render) 路由的主要内容,如果未能解决你的问题,请参考以下文章