1

我正在尝试使用会话Cookie实现Nuxt VueFire根据文档.

这是我的运行时配置真空炉配置对象数字配置.ts:

运行时配置:{公众:{//Nuxt auto用前缀为Nuxt_PUBLIC的匹配.env值替换值品牌名称:“”,fbApiKey:“”,fbAuthDomain:“”,项目ID:“”,fbDefaultStorageBucket:“”,fbMessagingSenderId:“”,fbAppId:“”,fbMeasurementId:“”,gcpRecaptchaEnterpriseSiteKey:“”,},},真空炉:{配置:{api键:process.env。NUXT_PUBLIC_FB_API_键,authDomain:process.env。NUXT_PUBLIC_FB_AUTH_DOMAIN公司,projectId:进程env。NUXT_PUBLIC_PROJECT_ID,storageBucket:进程.env。NUXT_PUBLIC_FB_DEFAULT_STORAGE_铲斗,messagingSenderId:process.env。NUXT_PUBLIC_FB_MESSAGING_SENDER_ID,appId:process.env。NUXT_PUBLIC_FB_APP_ID,measurementId:进程env。NUXT_PUBLIC_FB_测量ID,},身份验证:{enabled:true,启用:true,sessionCookie:true,},应用程序检查:{//允许您在开发中使用调试令牌调试:process.env。节点_ENV!==“生产”,isTokenAutoRefreshEnabled:true,提供者:“ReCaptchaEnterprise”,键:process.env。NUXT_PUBLIC_GCP_RECAPTCHA_ENTERPRISE_SITE_KEY||“无”,},},

但是,当使用带有会话Cookie的应用程序检查时,会抛出以下错误。当我取下时,效果很好sessionCookie:true因此,此错误肯定与会话Cookie+应用程序检查有关。

我认为出现此错误是因为用于Firebase应用程序检查的调试令牌通常仅在客户端环境中可用。什么时候?sessionCookie(会话Cookie)如果启用,服务器将尝试对令牌进行身份验证,该令牌在服务器上下文中不可用或无效。

这是我在应用程序检查和sessionCookie:true同时启用:

500Firebase:错误(auth/Firebase-app-check-token-is-invalid.)。at_fail(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/core/util/assert.ts:65:9)at_performFetchWithErrorHandling(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/api/index.ts:210:9)在process.processTicksAndRejections(节点:internal/process/task_queues:95:5)at_performSignInRequest(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/api/index.ts:231:27)位于Module.signInWithCustomToken(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/core/strages/custom_token.ts:56:37)异步/node_modules/nuxt-vuefire/dist/runtime/auth/plugin-authenticate-user.server.mjs:36:135异步设置(./virtual:nuxt:/Users/BenJackGill/Dev/seoturbo/apps/web/.nuxt/plugins/server.mjs:58:116)异步Object.callAsync(/Users/BenJackGill/Dev/seoturbo/node_modules/unctx/dist/index.mjs:72:16)异步应用插件(/Users/BenJackGill/Dev/seoturbo/node_modules/nuxt/dist/app/nux.js:116:25)

此外,如果我的Firebase Browser API Key设置了网站限制(http://localhost:3000http://localhost:3000)我在屏幕上(而不是控制台上)看到这个错误。

我认为此错误是由于Firebase API密钥被限制为特定域,并且由于服务器没有发送与这些域匹配的referer头,因此请求被阻止。

以下是当我设置Firebase Browser API Key的网站限制时,我在屏幕上(而不是控制台上)看到的错误:

500Firebase:错误(auth/requests-from-referer-<empty>-are-blocked。)。at_fail(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/core/util/assert.ts:65:9)在_performFetchWithErrorHandling(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/api/index.ts:210:9)在process.processTicksAndRejections(节点:internal/process/task_queues:95:5)at_performSignInRequest(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/api/index.ts:231:27)位于Module.signInWithCustomToken(/Users/BenJackGill/Dev/seoturbo/node_modules/@firebase/auth/src/core/strages/custom_token.ts:56:37)异步/node_modules/nuxt-vuefire/dist/runtime/auth/plugin-authenticate-user.server.mjs:36:135异步设置(./virtual:nuxt:/Users/BenJackGill/Dev/seoturbo/apps/web/.nuxt/plugins/server.mjs:58:116)异步Object.callAsync(/Users/BenJackGill/Dev/seoturbo/node_modules/unctx/dist/index.mjs:72:16)异步应用插件(/Users/BenJackGill/Dev/seoturbo/node_modules/nuxt/dist/app/nux.js:116:25)

我想这可能与我的认证中间件,它有时会触发服务器上的调用,所以我也将在这里包括它。注意,我尝试将其从服务器上排除,如所示此处显示文档在下面的评论中,但没有任何影响:

//中间件/身份验证导出默认defineNuxtRouteMiddleware(async(to,from)=>{//我试着在初始客户端加载时使用它跳过中间件。它不起作用。//const nuxtApp=使用nuxtApp();//如果(//导入元客户端&&//nuxtApp.is补水&&//nuxtApp.payload.server渲染// ) {//回报;// }//我还尝试使用它跳过服务器上的中间件。它不起作用。//if(import.meta.server){//回报;// }//获取当前用户const user=等待getCurrentUser();//重定向所有注销用户登录页面if(!用户){返回navigateTo({路径:“/login”,});}});

我如何克服这一点?

1
  • 第一个错误似乎与应用程序检查 调试这应该只对客户端有效,我可以看出它应该是错误的生产处理版本。节点_ENV!==“生产”。第二个问题似乎与referrer标头不匹配有关。如果你能提供代码沙盒,那么审查你的问题就会容易得多 5月19日21:31

1答案1

重置为默认值
2
+250

我试图复制您的确切错误,但我做不到。在配置vuefire-nuxt时,我确实注意到了一些可能的错误原因。

这里有一个链接对于一个只需实现vuefire nuxt身份验证的回购,在这个示例中,我使用google作为登录提供者

错误的可能原因:

  1. 缺少包,请检查可能要从中添加的包模板项目空洞的
  2. Firebase控制台配置包含几个可能不正确并导致应用程序检查错误的元素。
  3. 数字配置.ts我看得出你错过了模块:['nuxt-vuefire','@vueuse/nuxt']
  4. 在firebase控制台中设置调试令牌,该令牌将是可用的客户端浏览器控制台日志
1

你的答案

点击“发布您的答案”,即表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.