Vue 组件仅在 FirebaseUI 重定向后在控制台悬停、窗口调整大小等时更新

Posted

技术标签:

【中文标题】Vue 组件仅在 FirebaseUI 重定向后在控制台悬停、窗口调整大小等时更新【英文标题】:Vue component only updating on console hover, window resize, etc, after FirebaseUI redirect 【发布时间】:2020-05-27 16:43:55 【问题描述】:

我正在使用 FirebaseUI 进行 Vue(tify) 登录。登录发生在 v-dialog 中并重定向到“帐户”页面。相关脚本:

export default 
  data() 
    let uiConfig = 
      signInSuccessUrl: "/account",
      signInOptions: [
        firebase.auth.GoogleAuthProvider.PROVIDER_ID,
        firebase.auth.FacebookAuthProvider.PROVIDER_ID,
      ]
    ,
    return 
      uiConfig: uiConfig
    
  

另一方面,帐户页面如下所示:

<template>
  <div v-if="user"> user.displayName </div>
</template>

<script>
export default 
  data() 
    return 
      user: null
    
  ,
  created() 
    firebase.auth().onAuthStateChanged(user => 
      if (user) 
        this.user =  displayName: user.displayName ;
      
    );
  

</script>

我的预期行为:我单击其中一个登录选项(比如说 Google),它会将我重定向到 /account。然后它呈现 div 并向我显示我的用户名。

实际行为:重定向后页面保持空白。当我打开抽屉、调整窗口大小或将鼠标悬停在 chrome DevTools 中的 Vue 开发人员控制台上时,页面会正确呈现。

我认为这是因为 DOM 没有成功渲染......但无论我尝试什么,我都无法让它工作。

有什么想法吗?

【问题讨论】:

尝试在挂载的而不是创建的钩子中加载用户。 恐怕没有变化。 【参考方案1】:

两个组件中的数据部分应如下所示:

data() 
    return 
      uiConfig: 
        signInSuccessUrl: "/account",
        signInOptions: [
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
        ]
      
    
  
data() 
    return 
     user: null
    
  ,

【讨论】:

你说得对。我的一个错字。我已经编辑了我的代码。 不幸的是,没有。您的建议是我的代码一开始的样子,但我在这里打错了。 你能简化你的代码在 jsfiddle 中做一个例子吗?【参考方案2】:

最后问题似乎是 FirebaseUI 的 SignInSuccessful 方法如何与 vue-router 一起使用:不好。为了避免这个问题,我取出了该方法并添加了一个在成功登录时触发的回调。

uiConfig: 
  signInOptions: [
    firebase.auth.GoogleAuthProvider.PROVIDER_ID,
    firebase.auth.FacebookAuthProvider.PROVIDER_ID
  ],
  callbacks: 
    signInSuccessWithAuthResult: function() this.$router.push( path: 'account' )
  
,

通过此更改,实现了预期的行为。

【讨论】:

以上是关于Vue 组件仅在 FirebaseUI 重定向后在控制台悬停、窗口调整大小等时更新的主要内容,如果未能解决你的问题,请参考以下文章

带有 Firebase 和 FirebaseUI 的 Nuxt 中间件:错误:通过导航守卫从“/anything”转到“/login”时重定向

Vue如何在登录后重定向用户到主要组件

Vue.js - 如何将所有请求重定向到同一个组件

14.Vue路由参数传递以及重定向

Vue-router 重定向 - redirect

vue-router路由嵌套与二级路由重定向