Javascript 火基路由。If语句

Javascript 火基路由。If语句,javascript,firebase,vue.js,google-cloud-firestore,vuex,Javascript,Firebase,Vue.js,Google Cloud Firestore,Vuex,我正在为我的项目使用firestore和vuex。 我完成了签名法 我想完成以下操作 当用户第一次登录时,URL将重定向到/selfonboarding以完成配置文件设置 如果用户提交所有信息并完成配置文件设置,“proUser”集合中的状态字段设置为true 否则,用户未完成配置文件设置,状态将保持为false,直到用户完成所有配置文件设置 所有文档在“proUser”集合中都有“status”字段。 所以我需要逐一检查状态 现在,我需要条件分支 以下是我想要实现的:如果proUser集合具有

我正在为我的项目使用firestore和vuex。 我完成了签名法

我想完成以下操作

当用户第一次登录时,URL将重定向到/selfonboarding以完成配置文件设置

如果用户提交所有信息并完成配置文件设置,“proUser”集合中的状态字段设置为true

否则,用户未完成配置文件设置,状态将保持为false,直到用户完成所有配置文件设置

所有文档在“proUser”集合中都有“status”字段。 所以我需要逐一检查状态

现在,我需要条件分支

以下是我想要实现的:如果proUser集合具有字段“status”==true,则用户将重定向到/dashboard/products。如果集合具有“status”==false字段,则路由将为/selfonboarding

问题是,当我以“status”==true字段的用户身份登录时,我可以转到/dashboard/products

但即使我以“status”==false的用户身份登录,路由仍然是一样的

我的问题是,为什么我不能以“状态”==false的形式进入/selfonboarding

这是我的签名方法

我只想检索一个用户数据,但现在我正在检索“status”==true的所有用户

login.vue

<template>
<div>
    <img src="../img/svg/Mangosteen.png" alt="">
    <b-card
    class="login-card"
    >
    <form action="" @submit.prevent="signIn">
    <div>
    <b-form>

        <p class="mt-3  text-center login-title">Profile</p>   
    
        <b-form-input
        id="input-3"
        v-model="email"
        type="email"
        required
        placeholder="Email"
        class="mt-5 input"
        name="email" 
        v-validate="'required|email'" 
        :class="{ 'mt-5 input': errors.has('email') }">
        >
        </b-form-input>
        <p v-show="errors.has('email')" class="validate text-center">{{ errors.first('email') }}</p>
        <b-form-input
        id="input-4"
        v-model="password"
        type="password"
        required
        placeholder="Password"
        class="mt-5 input"
        name="password" 
        v-validate="'required|min:6'" 
        :class="{ 'mt-5 input': errors.has('password') }"
        ></b-form-input>
        <p v-show="errors.has('password')" class="validate text-center">{{ errors.first('password') }}</p>
        <error-bar :error="error"></error-bar> 

    </b-form>

    <b-button class="loginbutton-color" type="submit">Login</b-button>
    <div v-if="show">
        <b-button class="loginbutton-color" type="submit">
            <spring-spinner
                :animation-duration="3000"
                :size="27"
                color="#ff1d5e"
                class="loading"
            />
      </b-button>
    </div>
    
    </div>
    </form>
</b-card>

</div>
</template>

<script>
import fireApp from '@/plugins/firebase'
import ErrorBar from '@/components/ErrorBar'
import { SpringSpinner } from 'epic-spinners'
import store from '../store'

  export default {
    data() {
      return {
        email: '',
        password: '',
        error: '',
        show: false
      }
    },
    components: {
      ErrorBar: ErrorBar,
      SpringSpinner
    },
    methods: {
        signIn() {
            this.show = true
            const user = {
              email: this.email,
              password: this.password
            }
            store.dispatch('signIn', user)
            this.show = false
        },

    }
  }
</script>

配置文件 >

{{{errors.first('email')}

{{{errors.first('password')}

登录 从“@/plugins/firebase”导入fireApp 从“@/components/ErrorBar”导入ErrorBar 从“epic微调器”导入{SpringSpinner} 从“../store”导入存储 导出默认值{ 数据(){ 返回{ 电子邮件:“”, 密码:“”, 错误:“”, 节目:假 } }, 组成部分:{ ErrorBar:ErrorBar, 弹簧纺纱机 }, 方法:{ 签名(){ this.show=true 常量用户={ 电子邮件:this.email, 密码:这个是密码 } store.dispatch('登录',用户) this.show=false }, } }
我希望有人能帮助我。
感谢您执行
var userStatus=db.collection('ProUser')。其中(“status”、“==”,true)
您定义了一个,因此,在调用
get()
时,您得到的是一个而不是
DocumentSnapshot
。因此
doc.exists
始终返回
false
,因为a没有
exists
属性

您需要循环使用
QuerySnapshot
(如中所示),或者使用
QuerySnapshot
docs
size
属性来检查所需文档是否存在,具体取决于您的具体目标


更新以下评论:

我知道您需要使用与用户ID对应的ID检查文档。请执行以下操作:

   // Get the user id (from the user object I guess)
   const userId = user.uid;
   // or maybe through  const userId = fireApp.auth().currentUser.uid;

   const proUserDocRef = db.collection('ProUser').doc(userId);
            
   proUserDocRef.get().then((doc) => {
        if (doc.exists && doc.data().status === true)) {
            router.push("dashboard/products");
        } else {
            router.push("selfonboarding");
        }
   })

抱歉,我以“状态”==false的用户身份重试。然后,我又转到路径/仪表板/产品。我如何解决这个问题?你能分享你改编的代码吗?请单击编辑链接,用新代码更新您的问题。请注意,您需要真正修改
if
子句<代码>如果(doc.exists)将无法执行您在
查询中所做的任何更改。
QuerySnapshot
没有
exists
属性。我需要了解您到底想做什么。我不清楚为了将用户重定向到另一个页面(
/dashboard/products
selfonboard
),您想要实现什么样的业务逻辑。您查询多个文档:如何根据这些文档决定要重定向到的页面?对不起,集合“proUser”有“status”字段。如果为真,用户将重定向到/dashboard/products。如果为false,用户将重定向到/selfonboarding。这就是我想要实现的。非常感谢!const userId=fireApp.auth().currentUser.uid;工作!我
   // Get the user id (from the user object I guess)
   const userId = user.uid;
   // or maybe through  const userId = fireApp.auth().currentUser.uid;

   const proUserDocRef = db.collection('ProUser').doc(userId);
            
   proUserDocRef.get().then((doc) => {
        if (doc.exists && doc.data().status === true)) {
            router.push("dashboard/products");
        } else {
            router.push("selfonboarding");
        }
   })