Javascript 火基路由。If语句
我正在为我的项目使用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.vueJavascript 火基路由。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集合具有
<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");
}
})