我使用带有 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目前所提供的范围?