【问题标题】:Vue.js Vuex Firebase - Cannot get user from storeVue.js Vuex Firebase - 无法从商店获取用户
【发布时间】:2018-09-08 07:17:02
【问题描述】:

在我的路由器中,我有一个 beforeEach 守卫来检查受保护的页面。 当我显示商店状态时,我可以看到有一个用户(绑定到 Firebase)但我无法获取它,甚至显示它......

router.beforeEach((to, from, next) => {
  console.log('ROUTER from: ', from, ' to: ', to, '  next: ', next)
  if (to.matched.some(record => record.meta.requiresAuth)) {
    console.log('protected page')
    console.log('store state: ', store.state)
    console.log('store state user: ', store.state.user)
    if (!store.state.user || !store.state.user.emailVerified || store.state.user.isAnonymous) {
      // console.log('ROUTER auth user: ', store.state.user)
      next({
        path: '/signin'
      })
    } else {
      next()
    }
  } else {
    // console.log('ROUTER no auth: ', to)
    next()
  }
})

Chrome 开发工具的console.log 输出

【问题讨论】:

  • 你使用 vuex 模块吗?
  • console.log('store state user: ', store.state.user) 打印什么吗?

标签: firebase vue.js vuex


【解决方案1】:

确保User是Auth,如果你使用vue-cli,你可以在main.js中使用firebase auth的方法onAuthStateChanged()。看例子:

在你main.jsfirebase 初始化后

// Initialize Firebase
    let config = {
       apiKey: "you_app_generated_key",
       authDomain: "youapp-randomkey.firebaseapp.com",
       databaseURL: "https://youapp-randomkey.firebaseio.com",
       projectId: "youapp-randomkey",
       storageBucket: "gs://youapp-randomkey.appspot.com/",
    };
    firebase.initializeApp(config);

    //If the event onAuthStateChanged() is emited
    //You can can verify if the user is auth or not.
    //If he isn't you can set null for the user.

    firebase.auth().onAuthStateChanged((user) => {

        if (user) {

            this.$store.dispatch('setUser', user) //set the User

        } else {

            this.$store.dispatch('setUser', null) //set null because he is notauth
        }

    })


    }
})

现在,在您项目的任何部分,您都可以验证您所在的州是否有用户。

如果有一个用户,要显示它,这取决于你需要显示什么用户道具。

当需要显示或获取用户时:姓名、电子邮件和照片。我愿意:

let user = state.user
let user_id: user.uid
let user_name: user.displayName,
let user_photo: user.photoURL

.

对不起我的英语。

【讨论】:

  • 感谢您的反馈...我先编辑了它,但后来我将它作为一个动作(bindAuth() 并在创建我的 App 组件时感到兴奋...但是您的评论让我步入正轨...我再次检查了我的 main.js 并发现了之前的代码 ...仍然存在如此重复,我应该删除所以你的答案是正确的,它对我有帮助...我投票给它
猜你喜欢
  • 1970-01-01
  • 2020-06-27
  • 2020-02-05
  • 2018-02-28
  • 2022-01-11
  • 2019-12-20
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多