如何使用户能够在 firebase 中访问其用户数据

问题描述 投票:0回答:1

这些是我的 firebase 实时数据库规则;

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
 
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.id === $uid",
        ".write": "auth.id === $uid"
      }
    }
  } 
}

现在;我希望当用户登录时,他应该能够访问他的用户数据。

但是目前我收到访问被拒绝的响应,表明客户端没有访问所需数据所需的权限,但他已成功登录。

帮助我了解如何让用户在登录时读取其用户数据;

以下是我的尝试;

//my web app's Firebase configuration
var firebaseConfig = {
      // my configurations
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
// Initialize variables
const auth = firebase.auth()
const database = firebase.database()

// Set up our login function
function login () {
  // Get all our input fields
  email = document.getElementById('email').value
  password = document.getElementById('password').value

  // Validate input fields
  if (validate_email(email) == false || validate_password(password) == false) {
    alert('Email or Password is Outta Line!!')
    return
    // Don't continue running the code
  }

  var database_ref = database.ref()
  auth.signInWithEmailAndPassword(email, password)
  .then(function() {
    // Declare user variable
    var user = auth.currentUser
    
    // Create User data
    var user_data = {
      last_login : Date.now()
    }
    
    // Push to Firebase Database
    database_ref.child('users/' + user.uid).update(user_data)
    
    const usersRef = database.ref('users');
    const userRef = usersRef.child(user.uid);
        
        
    // Add this user to Firebase Database
        //var database_ref = database.ref()
    
    userRef.once('value')
      .then(snapshot => {
        const userData = snapshot.val();
        alert(userData); // Access the retrieved user data
      })
      .catch(error => {
        alert(error);
      });
    
    // DOne
    alert('User Logged In!! && verified ' + user.emailVerified + " usernameIs "+ JSON.stringify(user.uid))

  })
  .catch(function(error) {
    // Firebase will use this to alert of its errors
    var error_code = error.code
    var error_message = error.message

    alert(error_message)
  })
}
javascript firebase-realtime-database firebase-authentication firebase-security
1个回答
0
投票

我通过更新实时数据库规则解决了该问题,如下所示;

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.