aqw*_*ert 8 dart firebase firebase-authentication flutter google-cloud-firestore
使用flutter,我已经安装了firebase-auth和firestore包,并且能够使用firebase auth进行身份验证,并且只要我没有围绕用户的任何规则就可以调用firestore.
我有一个调用的按钮,_handleEmailSignIn我确实得到了一个有效的用户(因为他们在Firebase Auth DB中)
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
final FirebaseAuth _auth = FirebaseAuth.instance;
void _handleEmailSignIn(String email, String password) async {
try {
FirebaseUser user = await _auth.signInWithEmailAndPassword(
email: email, password: password);
print("Email Signed in " + user.uid); // THIS works
} catch (err) {
print("ERROR CAUGHT: " + err.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
然后我有另一个按钮调用此函数来尝试将记录添加到testing123集合中.
Future<Null> _helloWorld() async {
try {
await Firestore.instance
.collection('testing123')
.document()
.setData(<String, String>{'message': 'Hello world!'});
print('_initRecord2 DONE');
} catch (err) {
print("ERROR CAUGHT: " + err.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
现在这个工作只要我没有任何关于检查请求用户的规则.这有效......
service cloud.firestore {
match /databases/{database}/documents {
match /testing123auth/{doc} {
allow read, create
}
}
}
Run Code Online (Sandbox Code Playgroud)
PERMISSION_DENIED: Missing or insufficient permissions.当我想确保我拥有经过身份验证的用户时,这并没有给出_handleEmailSignIn.
service cloud.firestore {
match /databases/{database}/documents {
match /testing123auth/{doc} {
allow read, create: if request.auth != null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑firestore请求不包括firebase用户.我是打算配置firestore来包含用户还是应该自动作为firebase的一部分?
bri*_*t08 -1
我建议制定这样的规则:
service cloud.firestore {
match /databases/{database}/documents {
match /testing123auth/{documents=**} {
allow read, create: if true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,限制用户的范围:
service cloud.firestore {
match /databases/{database}/documents {
match /testing123auth/{userId} {
allow read, create:
if (request.auth.uid != null &&
request.auth.uid == userId); // DOCUMENT ID == USERID
} // END RULES FOR USERID DOC
// IF YOU PLAN TO PUT SUBCOLLECTIONS INSIDE DOCUMENT:
match /{documents=**} {
// ALL DOCUMENTS/COLLECTIONS INSIDE THE DOCUMENT
allow read, write:
if (request.auth.uid != null &&
request.auth.uid == userId);
} // END DOCUMENTS=**
} // END USERID DOCUMENT
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |