angular - 尝试保存到数据库时,Angularfire Firestore 一直提供不足的权限
问题描述
当我尝试上传到云 Firestore 时,我不断收到“FirebaseError:缺少权限或权限不足”
这些是我的规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if request.auth.uid == request.auth.uid
allow write: if request.auth.uid == request.auth.uid
}
}
}
这是我的服务
import { Injectable } from '@angular/core';
import { User } from '../Models/Users';
import { AlertController } from '@ionic/angular';
import { AngularFireAuth } from '@angular/fire/auth';
import * as firebase from 'firebase/app';
import { AngularFirestore } from '@angular/fire/firestore';
import { first } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class FirebaseService {
constructor(
private auth : AngularFireAuth,
private firestore : AngularFirestore,
private altCtrl : AlertController
) { }
isLoggedIn() {
return this.auth.authState.pipe(first()).toPromise();
}
async login(email:string, password:string):Promise<any>{
var result = await this.auth.signInWithEmailAndPassword(email, password);
//var result = await firebase.auth().signInWithEmailAndPassword(email,password);
if(result.user !== undefined ){
var uid = result.user.uid;
return uid;
}else{
return null;
}
}
async createAccount(email:string,password:string, user:User):Promise<boolean>{
try {
var result = await this.auth.createUserWithEmailAndPassword(email,password);
//var result = await firebase.auth().createUserWithEmailAndPassword(email,password);
if(result.user != undefined){
return true;
}else{
return false;
}
} catch (error) {
throw error;
}
}
async createUserDocument(user:User):Promise<boolean>{
try {
await this.login(user.email, user.password);
var result = await this.isLoggedIn();
if(result){
await this.firestore.collection('Users').doc(user.first_name).set(user);
//await firebase.firestore().collection("Users").add(user);
return true;
}else{
return false;
}
} catch (error) {
throw error;
return false;
}
}
}
这是我的应用模块
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { LoaderComponent } from './widgets/loader/loader.component';
import { SQLite } from '@ionic-native/sqlite/ngx';
import { IonicStorageModule } from '@ionic/storage-angular';
import { AuthGuard } from './Guards/auth.guard';
import { AutoLoginGuard } from './Guards/auto-login.guard';
import { AngularFireModule } from '@angular/fire';
import { AngularFirestoreModule } from '@angular/fire/firestore';
import { FirebaseService } from '../app/Services/firebase.service';
//real information hidden for security
const config = {
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
authDomain: "xxxxxxxxxxxxxxxxxxxxxxxxx",
projectId: "xxxxxxxxxxxxxxxxxxxxxxxxx",
storageBucket: "xxxxxxxxxxxxxxxxxxxxxxxxxxx",
messagingSenderId: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
appId: "xxxxxxxxxxxxxxxxxxxxxx",
measurementId: "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
@NgModule({
declarations: [
AppComponent,
LoaderComponent
],
entryComponents: [],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
IonicStorageModule.forRoot(),
AngularFireModule.initializeApp(config),
AngularFirestoreModule,
AngularFirestoreModule.enablePersistence(),
],
providers: [
{
provide: RouteReuseStrategy,
useClass: IonicRouteStrategy
},
AuthGuard,
AutoLoginGuard,
SQLite,
SplashScreen,
FirebaseService,
],
bootstrap: [AppComponent],
})
export class AppModule {}
仅当规则设置为 true 时,保存到数据库才有效。
在我的事业中,只要用户经过身份验证,就可以修改数据
解决方案
我不知道它是来自 Angular 12 还是来自 firebase。我通过将 firebase 降级到 8.3.0 版解决了这个问题
推荐阅读
- android - Android Jetpack 不属于 AOSP 平台 API
- c++ - std::regular_invocable 和按值参数
- c++ - 如何从 Cimg FFT 获取 FFT 值?
- .net-core - 在 .NET Core 中禁用“清洁解决方案”的并行执行
- python - 将逻辑门转换为 cnf python
- json - 如何在颤动中将jsonDecode返回与用户类映射
- flutter - 如何在颤动中创建滑块,显示值标签,以及如何将颜色更改为多种颜色?
- bash - 在 Bash 中用两个连续的分隔符拆分字符串
- flutter - Flutter nullsafety:条件列表位置
- visual-studio-code - Visual Studio 工作区任务意外错误