【问题标题】:Firebase denies permission even though auth was successful即使身份验证成功,Firebase 仍拒绝许可
【发布时间】:2019-04-11 15:32:42
【问题描述】:

使用auth.signInWithEmailAndPassword成功,还是没有权限访问数据库。

这应该是一个从数据库数据生成 PDF 的后端脚本。使用不同的脚本+网站来生成数据并且工作得很好。 我已经用该代码交叉引用了它,但它不起作用。尝试删除承诺,将无法正常工作。尝试扩展承诺并抓住它们,但没有用。

// simplified, successful auth with predefined, working email and password
auth.signInWithEmailAndPassword(email, password);


// this bit causes the error messages
db.collection('redacted').get()
  .then((snapshot) => {
    snapshot.forEach((doc) => {
      console.log('success');
    });
  })
  .catch((err) => {
    console.log('Error getting documents', err);
  });

我希望在控制台中得到一个不错的“成功”,但我得到了:

(node:4892) DeprecationWarning: grpc.load: Use the @grpc/proto-loader module with grpc.loadPackageDefinition instead
Error getting documents { FirebaseError: Missing or insufficient permissions.
    at new FirestoreError (.\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:353:28)
    at JsonProtoSerializer.fromRpcStatus (.\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:5772:16)
    at JsonProtoSerializer.fromWatchChange (.\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:6269:44)
    at PersistentListenStream.onMessage (.\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:14819:43)
    at .\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:14748:30
    at .\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:14788:28
    at .\firebaseTest\node_modules\@firebase\firestore\dist\index.node.cjs.js:7541:20
    at process._tickCallback (internal/process/next_tick.js:68:7)
  code: 'permission-denied',
  name: 'FirebaseError',
  toString: [Function] }

请帮忙。

【问题讨论】:

  • 你能发布你的firestore规则吗?
  • 允许读、写:if request.auth.uid != null;

标签: firebase permissions firebase-authentication


【解决方案1】:

登录后需要拨打db.collection('')

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
.. your code goes here.
  } 
}

在这里找到更多:https://firebase.google.com/docs/auth/web/start

【讨论】:

  • 做到了,现在它打印一次错误,两次成功。知道为什么吗?
  • 啊,对,对。这是因为身份验证过程的异步性质。您发送登录,但它不会立即让您登录,这需要一些时间。所以最好检查一下 Auth.user != null,或者如 Oleg 所说,去改变状态。该函数总是被调用两次,一次在定义时调用,一次在用户登录时调用
【解决方案2】:

在 Firebase 控制台上检查您的规则,可能您的用户无权访问请求的路径。

【讨论】:

  • 规则适用于其他脚本,允许: ... if: require.auth,uid != null;所以它基本上应该授予任何有效用户的访问权限,对吧?
猜你喜欢
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多