Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 云firestore中的规则存在问题(颤振)-权限被拒绝_Firebase_Flutter_Google Cloud Firestore_E Commerce_Product - Fatal编程技术网

Firebase 云firestore中的规则存在问题(颤振)-权限被拒绝

Firebase 云firestore中的规则存在问题(颤振)-权限被拒绝,firebase,flutter,google-cloud-firestore,e-commerce,product,Firebase,Flutter,Google Cloud Firestore,E Commerce,Product,我正在建立一个颤振电子商务应用程序。如果我以新用户身份登录、使用谷歌或注册,主页不会加载产品。。。在控制台中,它显示云firestore权限被拒绝。然后在我关闭并重新打开应用程序后,页面将加载产品 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.

我正在建立一个颤振电子商务应用程序。如果我以新用户身份登录、使用谷歌或注册,主页不会加载产品。。。在控制台中,它显示云firestore权限被拒绝。然后在我关闭并重新打开应用程序后,页面将加载产品

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
     allow read, write: if request.auth.uid != null;
         
    }
  }
}
上述规则不起作用。但是如果我登录,用户将成功登录,并且用户详细信息将添加到数据库中。 登录页面

错误:

W/Firestore(1298):(22.0.2)[Firestore]:监听 查询(目标=查询(产品订单依据) name);limitType=LIMIT\u TO\u FIRST)失败:状态{code=PERMISSION\u DENIED,description=缺少或不足 权限,原因=null}

主页

class _HomeoneState extends State<Homeone> {
  final _key = GlobalKey<ScaffoldState>();
  ProductServices _productServices = ProductServices();
  List _gender = ['Current location', 'loc1', 'loc2'];
  String _genderVal;
  @override
  Widget build(BuildContext context) {
    final userProvider = Provider.of<UserProvider>(context);
    final productProvider = Provider.of<ProductProvider>(context);
    return Scaffold(
      key: _key,
      backgroundColor: white,

      endDrawer: Drawer(
        child: ListView(
          children: <Widget>[
            UserAccountsDrawerHeader(
              decoration: BoxDecoration(color: red,
                borderRadius:  BorderRadius.only(bottomRight: Radius.circular(50),bottomLeft: Radius.circular(50)),
                image: DecorationImage(
                    fit: BoxFit.fill,
                    image: NetworkImage(
                        'https://blogrope.com/wp-content/uploads/2013/03/happy_wallpaper_by_melaamory-d5n8m53.jpg')),
              ),
              accountName: CustomText(
                text: userProvider.userModel?.name ?? "username lading...",
                color: black,
                weight: FontWeight.bold,
                size: 18,
              ),
              accountEmail: CustomText(
                text: userProvider.userModel?.email ?? "email loading...",
                color: black,
              ),
            ),
            ListTile(
              onTap: () async{
                await userProvider.getOrders();
                changeScreen(context, OrdersScreen());
              },
              leading: Icon(Icons.bookmark_outlined,color: Colors.black,),
              title: CustomText(text: "My orders"),
            ),
           
            ListTile(
              onTap: () {

                Navigator.push(
                    context, MaterialPageRoute(builder: (context) => MyHomePage()));
              },
              leading: Icon(Icons.exit_to_app_outlined,color: Colors.black,),
              title: CustomText(text: "Log out"),
            ),

            ListTile(
              onTap: () {

                userProvider.signOut();
              },
              leading: Icon(Icons.exit_to_app_outlined,color: Colors.black,),
              title: CustomText(text: "Log out"),
            ),
            ListTile(
              onTap: () {

                AuthService().signOutGoogle();
                Navigator.push(
                    context, MaterialPageRoute(builder: (context) => Login()));
              },
              leading: Icon(Icons.add),
              title: CustomText(text: "Log out for google"),
            ),
          ],
        ),

      ),
      body:
         SafeArea(

          child: ListView(

            physics: AlwaysScrollableScrollPhysics(),
            children: <Widget>[

//           Custom App bar
              Column(
                children: <Widget>[
                 
                  Container(
                    padding: const EdgeInsets.all(5.0),

                    child: Row(

                      children: [
                        Padding(
                            padding: const EdgeInsets.all(8.0),
                            child: Text('Hi',style: TextStyle(color: Colors.black),)),
                        Padding(
                          padding: const EdgeInsets.all(4.0),
                          child: Text(

                            userProvider.userModel?.name ?? "wait...",

                          ),
                        ),
                        Container(
                          margin: EdgeInsets.all(14),
                          child: Padding(
                            padding: const EdgeInsets.fromLTRB(200.0,0,0,0),
                            child: Align(
                                alignment: Alignment.topRight,
                                child: GestureDetector(
                                    onTap: (){
                                      changeScreen(context, CartScreen());
                                    },
                                    child: Icon(Icons.shopping_cart))),
                          ),
                        ),


                      ],
                    ),
                  ),
                  Container(
                    margin: EdgeInsets.fromLTRB(280, 0, 0, 0),
                    child: GestureDetector(

                        onTap: () {
                          _key.currentState.openEndDrawer();
                        },
                        child: Icon(Icons.menu)),
                  ),
                 

                  Padding(
                    padding: const EdgeInsets.all(5.0),
                    child: Align(
                      alignment: Alignment.topLeft,
                      child: Text(
                        'Delivering to',
                        style: TextStyle(
                          color: Colors.grey,
                        ),
                      ),
                    ),
                  ),
                  Container(
                    padding: EdgeInsets.all(8),
                    margin: EdgeInsets.all(4),
                    decoration: BoxDecoration(
                      border: Border.all(color: Colors.transparent),
                      borderRadius: BorderRadius.all(Radius.circular(20)),
                      color: Colors.white,
                    ),
                    child: DropdownButton(
                      hint: Text('Current location'),
                      dropdownColor: Colors.white,
                      value: _genderVal,
                      isExpanded: true,
                      onChanged: (value) {
                        setState(() {
                          _genderVal = value;
                        });
                      },
                      items: _gender.map((value) {
                        return DropdownMenuItem(
                          value: value,
                          child: Text(value),
                        );
                      }).toList(),
                    ),
                  ),
                 
                ],
              ),

//          Search Text field
//            Search(),

              Container(
                decoration: BoxDecoration(
                    color: white,
                    borderRadius: BorderRadius.only(
                        bottomRight: Radius.circular(24),
                        bottomLeft: Radius.circular(24))),
                child: Padding(
                  padding: const EdgeInsets.only(
                      top: 5, left: 14, right: 14, bottom: 14),
                  child: Container(
                    decoration: BoxDecoration(
                      color: grey.withOpacity(0.2),
                      borderRadius: BorderRadius.circular(15),
                    ),
                    child: ListTile(
                      leading: Icon(
                        Icons.search,
                        color: black,
                      ),
                      title: TextField(
                        textInputAction: TextInputAction.search,
                        onSubmitted: (pattern)async{
                          await productProvider.search(productName: pattern);
                          changeScreen(context, ProductSearchScreen());
                        },
                        decoration: InputDecoration(
                          hintText: "Search...",
                          border: InputBorder.none,
                        ),
                      ),
                    ),
                  ),
                ),
              ),

//            featured products
              ListTile(
                title: Text('Menu of the Day',
                  style: TextStyle(color: Colors.black, fontSize: 18),),
                trailing: Text('View all', style: TextStyle(color: Colors.red),
                ),
              ),
              FeaturedProducts(),
              ListTile(
                title: Text('Highly rated foods',
                  style: TextStyle(color: Colors.black, fontSize: 18),),
                trailing: Text('View all', style: TextStyle(color: Colors.red),
                ),
              ),
              FeaturedProductsone(),
//          recent products
              Row(
                children: <Widget>[
                  Padding(
                    padding: const EdgeInsets.all(14.0),
                    child: Container(
                        alignment: Alignment.centerLeft,
                        child: new Text('Recent products')),
                  ),
                ],
              ),

              Column(
                children: productProvider.products
                    .map((item) => GestureDetector(
                  child: ProductCard(
                    product: item,
                  ),
                ))
                    .toList(),
              ),

            ],
          ),

        ),

    );
  }
}
class\u同源嵌套扩展状态{
final_key=GlobalKey();
ProductServices_ProductServices=ProductServices();
列表_性别=[“当前位置”、“loc1”、“loc2”];
字符串_genderVal;
@凌驾
小部件构建(构建上下文){
final userProvider=Provider.of(上下文);
final productProvider=Provider.of(上下文);
返回脚手架(
键:_键,
背景颜色:白色,
收尾抽屉(
子:ListView(
儿童:[
UserAccountsDrawerHeader(
装饰:盒子装饰(颜色:红色,
borderRadius:borderRadius.only(右下角:半径.圆形(50),左下角:半径.圆形(50)),
图像:装饰图像(
fit:BoxFit.fill,
图片:NetworkImage(
'https://blogrope.com/wp-content/uploads/2013/03/happy_wallpaper_by_melaamory-d5n8m53.jpg')),
),
accountName:CustomText(
文本:userProvider.userModel?.name???“用户名加载…”,
颜色:黑色,
重量:fontwweight.bold,
尺码:18,
),
accountEmail:CustomText(
文本:userProvider.userModel?.email???“电子邮件加载…”,
颜色:黑色,
),
),
列表砖(
onTap:()异步{
等待userProvider.getOrders();
changeScreen(上下文,OrdersScreen());
},
前导:图标(图标。书签,颜色:颜色。黑色,),
标题:CustomText(文本:“我的订单”),
),
列表砖(
onTap:(){
导航器。推(
context,MaterialPageRoute(builder:(context)=>MyHomePage());
},
前导:图标(图标。退出到应用程序,颜色:Colors.black,),
标题:CustomText(文本:“注销”),
),
列表砖(
onTap:(){
userProvider.signOut();
},
前导:图标(图标。退出到应用程序,颜色:Colors.black,),
标题:CustomText(文本:“注销”),
),
列表砖(
onTap:(){
AuthService().signOutGoogle();
导航器。推(
context,MaterialPageRoute(builder:(context)=>Login());
},
前导:图标(Icons.add),
标题:CustomText(文本:“注销谷歌”),
),
],
),
),
正文:
安全区(
子:ListView(
物理:AlwaysScrollableScrollPhysics(),
儿童:[
//自定义应用程序栏
纵队(
儿童:[
容器(
填充:常数边集全部(5.0),
孩子:排(
儿童:[
填充物(
填充:常数边集全部(8.0),
子:文本('Hi',样式:TextStyle(颜色:Colors.black),),
填充物(
填充:常数边集全部(4.0),
子:文本(
userProvider.userModel?.name???“等待…”,
),
),
容器(
保证金:所有(14),
孩子:填充(
填充:LTRB(200.0,0,0,0)中的常数边集,
子对象:对齐(
对齐:alignment.topRight,
儿童:手势检测器(
onTap:(){
changeScreen(上下文,CartScreen());
},
子:图标(Icons.shopping_cart)),
),
),
],
),
),
容器(
边距:从LTRB(280,0,0,0)开始的边距集,
儿童:手势检测器(
onTap:(){
_key.currentState.openEndDrawer();
},
子:图标(Icons.menu)),
),
填充物(
填充:常数边集全部(5.0),
子对象:对齐(
对齐:alignment.topLeft,
子:文本(
“交付给”,
样式:TextStyle(
颜色:颜色。灰色,
),
),
),
),
容器(
填充:边缘设置。全部(8),
保证金:所有(4),
装饰:盒子装饰(
边框:边框。全部(颜色:颜色。透明),
边界半径:边界半径
final userProvider  = Provider.of<UserProvider>(context);
    return Scaffold(
      key: _key,
      body:userProvider.status == Status.Authenticating ? Loading() : Form(
        key: _formKey,
        child: ListView(
          children: <Widget>[
        Container(
              padding: EdgeInsets.all(20.0),
              margin: EdgeInsets.all(30),
              child: Center(
                child: Text(
                  'Login',
                  style: TextStyle(
                    fontSize: 30,
                    fontWeight: FontWeight.w500,
                  ),
                ),
              ),
            ),


            Container(
              child: Center(
                child: Text(
                  'Add details to login',
                  style: TextStyle(
                    fontSize: 15,
                  ),
                ),
              ),
            ),

            Container(
              padding: EdgeInsets.all(20),
              child: TextFormField(
                controller: _email,
                keyboardType: TextInputType.emailAddress,

                decoration: InputDecoration(
                  suffixIcon: Icon(Icons.email),
                  enabledBorder: OutlineInputBorder(
                    borderSide: BorderSide(color: Colors.transparent),
                    borderRadius: BorderRadius.all(Radius.circular(20)),
                  ),
                  hintText: 'Your Email',
                  focusedBorder: OutlineInputBorder(
                    borderSide: BorderSide(color: Colors.blueAccent),
                    borderRadius: BorderRadius.all(Radius.circular(20)),
                  ),

                  filled: true,
                  fillColor: Colors.grey[200],
                ),
                validator: (value) {
                  if (value.isEmpty) {
                    Pattern pattern =
                        r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
                    RegExp regex = new RegExp(pattern);
                    if (!regex.hasMatch(value))
                      return 'Please make sure your email address is valid';
                    else
                      return null;
                  }
                },
              ),
            ),

      Container(
            padding: EdgeInsets.all(20),
            child: TextFormField(
              controller: _password,
              obscureText: true,

              decoration: InputDecoration(
                suffixIcon: Icon(Icons.vpn_key_sharp),
                enabledBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.transparent),
                  borderRadius: BorderRadius.all(Radius.circular(20)),
                ),
                hintText: 'Password',
                focusedBorder: OutlineInputBorder(
                  borderSide: BorderSide(color: Colors.blueAccent),
                  borderRadius: BorderRadius.all(Radius.circular(20)),
                ),
                filled: true,
                fillColor: Colors.grey[200],
              ),
                validator: (value) {
                  if (value.isEmpty) {
                    return "The password field cannot be empty";
                  } else if (value.length < 6) {
                    return "the password has to be at least 6 characters long";
                  }
                  return null;
                },
            ),
          ),
      Container(

            padding: EdgeInsets.all(40),
            child: RaisedButton(
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(40.0),
              ),
              color: Color(0xfffd44323),
              child: Text('Login',
                  style: TextStyle(
                    fontSize: 20,
                  )),
              textColor: Colors.white,

              onPressed: () async {
                // _loginUser(type: LoginType.email,email:_emailController.text, password:_passwordController.text,context: context);

                  if(_formKey.currentState.validate()){
                    if(!await userProvider.signIn(_email.text, _password.text))
                       _key.currentState.showSnackBar(SnackBar(content: Text("Failure")));
                    return;
                  }

                  changeScreenReplacement(context, HomePage());
                },


            ),
          ),
      InkWell(
            child: Container(
              child: Center(
                child: Text(
                  'Forgot password',
                  style: TextStyle(
                    fontSize: 15,
                  ),
                ),
              ),
            ),
            onTap: (){
              // Navigator.push(
              // context, MaterialPageRoute(builder: (context) => Dashone()));
            },
          ),
          Container(
            margin: EdgeInsets.all(35.0),
            child: Center(
              child: Text(
                'or Login with ',
                style: TextStyle(
                  fontSize: 15,
                ),
              ),
            ),
          ),
          Container(
            padding: EdgeInsets.all(5),
            margin: EdgeInsets.all(20.0),
            decoration: BoxDecoration(
              border: Border.all(color: Colors.transparent),
              borderRadius: BorderRadius.all(Radius.circular(34)),
              color: Color(0xfff3680c1),
            ),
            child: Center(
              child: ListTile(
                leading: SvgPicture.asset('assets/facebook.svg',
                    color: Colors.white),
                title: Center(
                    child: Text(
                      'Login with facebook',
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 17,
                      ),
                    )),
              ),
            ),
          ),
          Container(
            padding: EdgeInsets.all(5),
            margin: EdgeInsets.all(20.0),
            decoration: BoxDecoration(
              border: Border.all(color: Colors.transparent),
              borderRadius: BorderRadius.all(Radius.circular(34)),
              color: Color(0xfffd44323),
            ),
            child: Center(
              child: InkWell(
                child: ListTile(
                  leading: SvgPicture.asset(
                    'assets/google-plus.svg',
                    color: Colors.white,
                    height: 25.0,
                    width: 25.0,
                  ),
                  title: Center(
                      child: InkWell(
                        child: Container(
                          child: Text(
                            'Login with Google',
                            style: TextStyle(
                              color: Colors.white,
                              fontSize: 17,
                            ),
                          ),
                        ),
                        onTap: () async {
                          FirebaseAuth _auth = FirebaseAuth.instance;

                          User user = await AuthService().signInWithGoogle();
                            print(user);
                            if (user == null) {
                              _userServices.createUser({
                                "name": _auth.currentUser.displayName,
                                 "photo": _auth.currentUser.photoURL,
                                "email": _auth.currentUser.email,
                                "uid": _auth.currentUser.uid,
                                "votes": votes,
                                "trips": trips,
                                "rating": rating,

                              });
                              // _userServices.createUser(
                              //
                              //
                              // );
                             
                                // 5s over, navigate to a new page
                                Navigator.pushReplacement(
                                    context, MaterialPageRoute(
                                    builder: (context) => HomePage()));


                            }

                        },
                      ),
                      )
                  ),
                ),

            ),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                child: Center(
                  child: Text(
                    'Don\'t have an Account?',
                    style: TextStyle(
                      fontSize: 15,
                    ),
                  ),
                ),
              ),
              InkWell(
                child: Container(
                  padding: EdgeInsets.all(10.0),
                  child: Center(
                    child: Text(
                      'Sign up',
                      style: TextStyle(
                        fontSize: 15,
                        fontWeight: FontWeight.bold,
                        color: Color(0xfffd44323),
                      ),
                    ),
                  ),
                ),
                onTap: () {
                 changeScreen(context, SignUp());
                },
              ),
            ],
          ),
           

       ],

        ),

      ),
    );
  }



}