我使用带有 nuxt.render
中间件的Express后端来整合我的API,前端和开发环境 . 到目前为止,一切都很顺利,但我对我的auth设置的安全性有一些担忧 .
我的后端通过Nuxt中间件将其用户会话注入Vuex . 虽然这对于限制访问非常有用,但这些文件的源代码始终可以使用直接GET方法 . (例如,如果 /admin
受到保护, /_nuxt/admin.js
仍然可用,并将包含该页面的完整源代码) . 最糟糕的是,由于Nuxt将默认的 preload
链接放在头部,即使没有登录,也会自动获取它们 .
我知道这并没有很多安全问题,因为我的管理API调用在服务器端强制执行auth,但有时(因为我的情况),暴露源代码是不可取的 .
我想出了一个效果很好的解决方案,但不是很优雅:
-
在
nuxt.config.js
中,我设置render.resourceHints = false
. 我希望我没有必要这样做以从预取可用路由中受益,但似乎没有办法限制预取路由的选择 . -
在将
next.render
插入Express ' middleware chain, I selectively restrict the page' s源代码之前 . (例如app.get('/_nuxt/pages/admin.js', restrict)
,其中restrict
是一个中间件,如果未经过身份验证则返回401
,如果是,则调用next()
. 这会阻止XHR获取和直接GET . ) -
我创建了一个自定义的
error.vue
模板,我 grab 了如果强制访问用户不应该访问的路径,看起来像Loading chunk 1 failed
,并将其规范化为"Forbidden"错误页面,将会抛出错误消息 .
是否有一种更实用的方式来实现这一点,我想念,或者是否超出了Nuxt.js目前所提供的范围?