【问题标题】:[Firestore]: Write failed at message/recent: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}[Firestore]:消息/最近写入失败:状态{code=PERMISSION_DENIED,描述=缺少或权限不足。,原因=null}
【发布时间】:2020-09-02 23:34:22
【问题描述】:

将消息文本发送到 Firebase 中的 Firestore 数据库时出错

我已经集成了登录功能,现在想将输入的消息发送到 Firestore。

我是 Flutter 开发的新手,正在尝试链接 Firestore。 已经尝试过 collection.add() 和 collection.setData() .

这是飞镖代码

import 'package:flutter/material.dart';
import 'package:flash_chat/constants.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class ChatScreen extends StatefulWidget {
  @override
  _ChatScreenState createState() => _ChatScreenState();
  static const chat_screen = "chat_screen";
}

class _ChatScreenState extends State<ChatScreen> {
  final _auth = FirebaseAuth.instance;
  final _firestore = Firestore.instance;
  FirebaseUser loggedin;
  String message;

  void getCurrentUser() async {
    try {
      final user = await _auth.currentUser();
      loggedin = user;}
catch (e) {print(e);}}
  @override
  void initState() {
    super.initState();
    getCurrentUser();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: null,
        actions: <Widget>[IconButton(
              icon: Icon(Icons.close),
              onPressed: () {
                //Implement logout functionality
                _auth.signOut();
                Navigator.pop(context);
              }),],
        title: Text('⚡️Chat'),
        backgroundColor: Colors.lightBlueAccent,),
      body: SafeArea(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Container(
              decoration: kMessageContainerDecoration,
              child: Row(
                crossAxisAlignment: CrossAxisAlignment.center,
                children: <Widget>[Expanded(child: TextField(
                      onChanged: (value) {
                        //Do something with the user input.
                        message = value;},
                      decoration: kMessageTextFieldDecoration,),),
                  FlatButton(
                    onPressed: () {
                      //Implement send functionality.
                      _firestore
                          .collection('message')
                          .document('recent')
                          .setData({
                        'sender': loggedin.email,
                        'description': message
                      });
                    },
                    child: Text(
                      'Send',
                      style: kSendButtonTextStyle,
[The firebase Collection tree][1]
[Console output on submit][2]


  [1]: https://i.stack.imgur.com/eBAHI.png
  [2]: https://i.stack.imgur.com/cVdGS.png

【问题讨论】:

  • 您是否检查了仪表板中写入 Firestore 的规则?
  • 您的安全规则正在阻止访问。如果没有看到这些规则,我们无法确定您应该做什么或如何解决问题。
  • 我已经修好了。将规则从 false 更改为 true 并且有效。

标签: database firebase flutter google-cloud-firestore


【解决方案1】:

在尝试了几种解决方案并且几乎把自己喝到纸浆之后,我编辑了一个我找到的解决方案,它运行良好。我希望你觉得它有用。

Firestore 规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow create: if request.auth != null;
      allow read, write, update, delete: if request.auth != null;
    }
  }
}

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 2019-01-06
    • 2020-09-25
    • 2019-05-05
    • 2020-09-06
    • 2019-02-26
    • 2018-04-25
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多