【问题标题】:Firebase data not savingFirebase 数据未保存
【发布时间】:2017-10-31 03:28:08
【问题描述】:

我是 firebase 新手,正在尝试通过 firebase.auth().createUserWithEmailAndPassword(email, password) 上的 .then() 将用户对象(用户电子邮件)保存到数据库中

当我尝试这样做时,它会抛出一个错误:

FIREBASE 警告:设置在 /users/-KlMikr6xZnfYC6dFJ6L 失败:permission_denied

基本上说我没有权限将用户数据设置到用户节点。

我知道该功能何时起作用,因为当我将安全写入规则设置为 true 时,会在数据库中创建 userobj

不知道我做错了什么。

controller.js

angular.module('app')
  .controller('appCtrl', function($scope){

    //empty user object to store info
    $scope.user = {};

    //empty object to accept user password
    $scope.password = {};

    // add login event
    $scope.signUp = function(){
      const email = $scope.user.email;
      const password = $scope.password.setup;

      // create new firebase user
      firebase.auth().createUserWithEmailAndPassword(email, password)
        // add user object to database
        .then(function(){
          var userObj = $scope.user;
          console.log($scope.user);

          // set up database references
          let database = firebase.database();
          let ref = database.ref();
          let usersRef = ref.child('users');

          // push user object to database
          usersRef.push(userObj);

        })
        .catch(function(error) {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          console.log(errorCode);
          console.log(errorMessage);
        });   
    };

    firebase.auth().onAuthStateChanged(function(user) {
      if (user) {
        // User is signed in.
        console.log('user signed in');
        var uid = user.uid;
        console.log(uid);
      } else {
        // No user is signed in.
        console.log('user not signed in');
      }
    });

  })

Firebase 数据库规则

"rules": {
  "users": {
    "$uid": {
        ".read": true,
        ".write": "(auth.uid === $uid)"
    }
  }
}

【问题讨论】:

  • 显然你不能在创建用户之前让 uid 匹配,所以这就是错误。但简单地打开该数据的规则可能并不安全。我想看看这个问题的答案。投票

标签: javascript angularjs firebase firebase-realtime-database


【解决方案1】:

问题是您正在使用 .push(),它会创建具有新 UID 的子级。 您应该检索新创建的用户 UID,并将您的对象分配给相关引用。

let uid = firebase.auth().currentUser.uid;
let usersRef = ref.child('users').child(uid);
usersRef.set(userObj);

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多