当前位置: 首页 > 知识库问答 >
问题:

FireBaseError:缺少或权限不足。-Quasar&Firebase

赵俊远
2023-03-14

使用Quasar和Firebase的Im

我得到FireBaseError:缺少或权限不足。控制台错误

错误

脚本:

    // gets from the firebase
const path = "/newpage";
    this.$auth.onAuthStateChanged(authUser => {
if (authUser) {
 
this.$bind('userz', this.$db.collection('users'));
 this.$db.collection('users').doc(authUser.uid).get()
              .then(snapshot => {
                const userData = snapshot.data();
                console.log(userData);

 (this.$route.path !== path);
  this.$router.push(path).catch(err => {});

 this.livePaper = false;


   })} else  {
    
 this.livePaper = true;
console.log('user logged out'); 
this.$router.push('/Login').catch(err => {});

}   
    })

  },

每当我把

```this.$bind('userz', this.$db.collection('users'));```

发生缺少权限的情况

但当我移除绑定时,它没有错误

但我想在字段中获取username:值并将其放在我的导航上

firebase-用户名

``` <li v-for="(users, uid) in userz" :key="uid">
      {{users.username}} <q-btn v-on:click="livePaper = true"   label="Sign Out" @click="logOut()" color="green"/>

但我不能得到它除非我移除

```this.$db.collection('users').doc(authUser.uid).get()
          .then(snapshot => {
            const userData = snapshot.data();
            console.log(userData);```

同样,当我移除它时,丢失权限的情况再次发生。

我该怎么办

整个代码

<template>
  <q-layout view="hHh lpR fFf">

    <q-header elevated class="bg-primary text-white">
      <q-toolbar>
      
        <q-btn  v-if="!livePaper" dense flat round icon="menu" @click="left = !left" />

        <q-toolbar-title>
          <q-avatar>
            <img src="https://cdn.quasar.dev/logo/svg/quasar-logo.svg">
          </q-avatar>
          Title
        </q-toolbar-title>
 <div class="q-pa-md hid" v-if="!livePaper">
  
   <li v-for="(users, uid) in userz" :key="uid">
          {{users.username}} <q-btn v-on:click="livePaper = true"   label="Sign Out" @click="logOut()" color="green"/>
   </li>
  </div>
       
      </q-toolbar>
    </q-header>

       <q-drawer v-if="!livePaper" show-if-above v-model="left" side="left"  bordered>

      <!-- drawer content -->
       <q-scroll-area style="height: calc(100% - 150px); margin-top: 150px; border-right: 1px solid #ddd">
       <q-list padding>
            <q-item clickable v-ripple>
              <q-item-section avatar>
                <q-icon name="inbox" />
              </q-item-section>
 <q-item-section>
                Inbox
              </q-item-section>
            </q-item>

            <q-item   clickable v-ripple>
              <q-item-section avatar>
                <q-icon name="star" />
              </q-item-section>

              <q-item-section>
                
                Star
              </q-item-section>
            </q-item>

            <q-item clickable v-ripple>
              <q-item-section avatar>
                <q-icon name="send" />
              </q-item-section>

              <q-item-section>
                Send
              </q-item-section>
            </q-item>

            <q-item clickable v-ripple>
              <q-item-section avatar>
                <q-icon name="drafts" />
              </q-item-section>

              <q-item-section>
                Drafts
              </q-item-section>
            </q-item>

             <q-item @click="icon = true" clickable v-ripple>
              <q-item-section avatar>
                 <q-dialog v-model="icon">
      <q-card style="width: 570px; max-width: 80vw;" class= "q-pa-xl ">
        <q-card-section class="row items-center q-pb-none ">
          <div class="text-h6">Sign Up</div>
          <q-space />
          <q-btn icon="close" flat round dense v-close-popup />
        </q-card-section>

         <q-separator />


   <q-card-section >
          <q-input filled v-model="usrnm" label="Username" id="usrnm" lazy-rules
       :rules="[ val => val && val.length > 0 || 'Please type something']"
      />

          <q-input filled v-model="eml" label="Email" id="eml" lazy-rules
       :rules="[ val => val && val.length > 0 || 'Please type something']"
      />

      <q-input
        filled
        type="password"
        v-model="pswrd"
        id="pswrd"
        label="Password"
        lazy-rules
         :rules="[ val => val && val.length > 0 ||'Please type a real age'
        ]"
      />

      <div>
        <q-btn label="Sign Up" type="submit" color="primary"  @click="signUps()" />
      
      </div>
        </q-card-section>
      </q-card>
    </q-dialog>
                <q-icon name="person_add" />
              </q-item-section>

              <q-item-section>
                Sign Up
              </q-item-section>
            </q-item> 

          </q-list>
        </q-scroll-area>
           
        <q-img class="absolute-top" src="https://cdn.quasar.dev/img/material.png" style="height: 150px">
          <div class="absolute-bottom bg-transparent">
            <q-avatar v-ripple size="56px" class="q-mb-sm">
              <img src="https://cdn.quasar.dev/img/boy-avatar.png">
            </q-avatar>
            <div class="text-weight-bold"></div>
            <div>@rstoenescu</div>
          </div>
        </q-img>
    </q-drawer>


    <q-page-container>
      <router-view />
    </q-page-container>

  </q-layout>
</template>

<script>
export default {
  data () {
    return {
      left: false,
      userz: [],
      livePaper: false,
        icon: false,
         eml: '',
      pswrd: '',
      usrnm: '',
      index: 0

    }
  },
  created() {

    // gets from the firebase
const path = "/newpage";
    this.$auth.onAuthStateChanged(authUser => {
if (authUser) {
 

 this.$db.collection('users').doc(authUser.uid)
              .get()
              .then(snapshot => {
                const userData = snapshot.data();
                console.log(userData);

 (this.$route.path !== path);
  this.$router.push(path).catch(err => {});
  this.$bind('userz', this.$db.collection('users').doc(authUser.uid));
    this.$bind('userz', this.$db.collection('users'));
 this.livePaper = false;


   })} else  {
    
 this.livePaper = true;
console.log('user logged out'); 
this.$router.push('/Login').catch(err => {});

}   
    })

  },
  methods: {

        logOut(){

   this.$auth.signOut();
 this.livePaper = true;
   },
 
                      
      signUps()  {
 this.$auth.createUserWithEmailAndPassword(this.eml, this.pswrd).then(cred => {
return this.$db.collection('users').doc(cred.userz.uid).set({
  email: this.eml,
  username: this.usrnm
});


      this.isEdit = false
      this.text = ''
      this.yr = ''
 }).then;(() => {


 });
  // ...
}
  }
}
</script> ```


  

共有1个答案

堵德曜
2023-03-14

这可能是一个重复的FireStore:permission_denied:缺少或权限不足的线程,至少我在这里得到了这个问题的帮助。

以适当的方式设置规则后,错误就会消失。我在quasar firebase示例应用程序中也遇到了同样的问题。

下面是firebase规则的文档,其中包含设置规则的所有细节:

https://firebase.google.com/docs/firestore/security/get-started

基本上是这条线

allow read, write: if false;

是问题所在,您可以将其更改为以下内容,以便仅允许已登录的用户访问数据库:

allow read, write: if request.auth != null;

下面的代码是不值得推荐的,因为它允许对您的数据库进行未经身份验证的访问,所以除非您处于测试场景中,否则不要使用它:

allow read, write: if false;
 类似资料:
  • 我有以下规则: 所以基本上,我希望经过身份验证的用户能够读/写和集合。但当我创建一个用户并登录时,我会尝试写: 但我有一个错误: 不知道我做错了什么。任何帮助都将不胜感激——谢谢!

  • 意向行为 目标是修改我的安全规则,以便只有经过身份验证的用户才能读写该特定用户的数据。这是基于users UID,这是我们如何识别单个用户的(这是通过firebase身份验证完成的,所以不确定问题是什么)。 我的数据库结构 FirebaseError:权限缺失或不足 任何关于我在这里能做什么的建议都将不胜感激。我在其他问题中找不到任何适用的东西。 我的查询 *我的错误

  • 我正在测试从我的无服务器angular应用程序部署的子集合查询。我有一个顶级lvl collection用户(2个子文档),有一个嵌套的collection secret,每个都包含一个文档索引contact_details(用于两个用户) 用于我使用的firestore规则 在我的AngularFirestore中,我使用AngularFirestore查询子集合秘密,如下所示: 我期望的行为是

  • 我在自学firestore,我想不出一种方法,只允许用户更新、删除或阅读他们添加的集合。 我使用firebase auth进行用户处理。对于每个集合,我将作为保存在数据库中。 这是我的规矩 当我试图读取/获取数据时,我得到错误。 我正在使用firestore的web api(JavaScript)。这是我用来读取数据的代码。

  • 我使用的是Role(允许读,写:如果request.auth.uid!=null),当我登录时,我得到的数据是ok的,但当我注销用户时,我得到的错误是:缺少或不充分的权限。首先,我认为这是因为我没有取消订阅我尝试的可观察的(rxjs/operator/takewhile)即使我使用异步管道,我也得到了同样的错误。