首页 > 解决方案 > 即使在登录后,firebase 中的权限也丢失或不足

问题描述

我为我的应用程序使用 facebook 登录。当使用 Facebook 登录创建用户时,后端代码以编程方式将该用户转换为emailVerified用户。

虽然登录FirebaseAuth.instance.currentUser给出

User(
  displayName: Balaji Venkatraman, 
  email: ****@gmail.com, 
  emailVerified: true,  // note: Email verified is true
  isAnonymous: false, 
  metadata: 
  UserMetadata(
    creationTime: 2021-01-21 16:36:58.098, 
    lastSignInTime: 2021-01-21 16:36:58.099), 
    phoneNumber: null, 
    photoURL: '',
    providerData, [
        UserInfo(
          displayName: Balaji Venkatraman, 
          email: '****@gmail.com', 
          phoneNumber: null, 
          photoURL: '',)
      ], 
    refreshToken: , 
    tenantId: null, 
    uid: sRrazGn8tSWagoD2N3oyCEa92yE2,
  )

在这里我能够成功登录并且emailVerfied标记也​​是正确的。但是创建集合会给出错误提示(我们有一个规则来检查用户电子邮件是否已验证):

在用户/sRrazGn8tSWagoD2N3oyCEa92yE2/userAssessment/food 处写入失败:状态{code=PERMISSION_DENIED,描述=缺少或权限不足。,原因=null}

这是我的规则

function signedInOrPublic(){
    return request.auth != null && request.auth.uid == userId && request.auth.token.firebase.sign_in_provider != "anonymous" && request.auth.token.email_verified == true;
}
match /userAssessment/{category}{
 allow read, write: if signedInOrPublic();
}

标签: firebasefluttergoogle-cloud-firestorefirebase-securityfacebook-login

解决方案


不幸的是,我不记得确切的规则应该如何编写,但是您可以尝试删除一个逻辑表达式以隔离问题,然后您可以谷歌找到正确的编写方法。

您确定 userId 包含用户 UID 吗?


推荐阅读