无法将新用户保存到 Firebase 数据库
Can't Persist New User to Firebase Database
我已经阅读了无数教程,但我根本无法让任何数据出现在 firebase 数据库中。我正在尝试获得此结构
"my-app-name": {
"users": {
"uid-of-user": {
"email": "them@them.com",
"todoitems": {
}
}
}
}
首先,我不确定如何获得该结构。在可视化编辑器的 "my-app-name"
下,我输入了 "users" = ""
。我不确定这是否是将 users
建立为空对象的方式。或者也许我根本不应该与可视化编辑器打交道?这是我的 createNewUser
控制器,它应该将新用户保存到数据库中:
function LoginController($scope, Auth, $state, $location, $firebaseObject, $firebase) {
$scope.createNewUser = createNewUser;
$scope.signupComplete = "";
function createNewUser() {
var ref = new Firebase("https://sizzling-torch-655.firebaseio.com/");
//CREATE USER
Auth.$createUser({
email: $scope.email,
password: $scope.password
}).then(function(userData) {
//THIS SHOULD BE PERSISTING IT TO THE DATABASE
var user = $firebaseObject(ref.child('users').child(userData.uid));
user.$loaded().then(function() {
var newUser = {
emailAddress: $scope.email,
};
user.$ref.$set(newUser);
})
// $location.path("/home");
}).catch(function(error) {
$scope.responseMessage = error;
});
};
};
请注意,我还没有在 firebase 数据库中创建用户对象。非常感谢任何帮助。非常感谢。
澄清
Auth.$creatUser
是:
app.factory("Auth", ["$firebaseAuth", function($firebaseAuth) {
return $firebaseAuth(ref);
}]);
我已成功创建用户并看到他们出现在 Firebase 仪表板的 Login/Users 选项卡中。不过我无法将它们存储到数据库中。
而 userData.uid
是从 $createUser
函数的 then
部分返回的 userData
对象。
编辑 2
这些是我的安全和规则。这会影响我将用户数据写入数据库吗?
这将是一个待办事项应用程序。用户应该只能访问自己的数据。
{
"rules": {
// public read access
".read": true,
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
Firebase 身份验证不会自动将用户信息存储在数据库中。如果要将此类信息存储在数据库中,则必须自己编写必要的代码。
来自您的代码段:
//THIS SHOULD BE PERSISTING IT TO THE DATABASE
var user = $firebaseObject(ref.child('users').child(userData.uid));
此代码不会在数据库中存储任何信息。相反,它会尝试从数据库中读取 用户数据。但是因为你一开始就没有把它写在那里,所以读取不会完成任何事情并且 then()
永远不会执行。
解决方案是在用户验证时将必要的用户数据写入数据库。
var user = $firebaseObject(ref.child('users').child(userData.uid));
var newUser = {
emailAddress: $scope.email,
};
user.$ref.$set(newUser);
我已经阅读了无数教程,但我根本无法让任何数据出现在 firebase 数据库中。我正在尝试获得此结构
"my-app-name": {
"users": {
"uid-of-user": {
"email": "them@them.com",
"todoitems": {
}
}
}
}
首先,我不确定如何获得该结构。在可视化编辑器的 "my-app-name"
下,我输入了 "users" = ""
。我不确定这是否是将 users
建立为空对象的方式。或者也许我根本不应该与可视化编辑器打交道?这是我的 createNewUser
控制器,它应该将新用户保存到数据库中:
function LoginController($scope, Auth, $state, $location, $firebaseObject, $firebase) {
$scope.createNewUser = createNewUser;
$scope.signupComplete = "";
function createNewUser() {
var ref = new Firebase("https://sizzling-torch-655.firebaseio.com/");
//CREATE USER
Auth.$createUser({
email: $scope.email,
password: $scope.password
}).then(function(userData) {
//THIS SHOULD BE PERSISTING IT TO THE DATABASE
var user = $firebaseObject(ref.child('users').child(userData.uid));
user.$loaded().then(function() {
var newUser = {
emailAddress: $scope.email,
};
user.$ref.$set(newUser);
})
// $location.path("/home");
}).catch(function(error) {
$scope.responseMessage = error;
});
};
};
请注意,我还没有在 firebase 数据库中创建用户对象。非常感谢任何帮助。非常感谢。
澄清
Auth.$creatUser
是:
app.factory("Auth", ["$firebaseAuth", function($firebaseAuth) {
return $firebaseAuth(ref);
}]);
我已成功创建用户并看到他们出现在 Firebase 仪表板的 Login/Users 选项卡中。不过我无法将它们存储到数据库中。
而 userData.uid
是从 $createUser
函数的 then
部分返回的 userData
对象。
编辑 2 这些是我的安全和规则。这会影响我将用户数据写入数据库吗? 这将是一个待办事项应用程序。用户应该只能访问自己的数据。
{
"rules": {
// public read access
".read": true,
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
Firebase 身份验证不会自动将用户信息存储在数据库中。如果要将此类信息存储在数据库中,则必须自己编写必要的代码。
来自您的代码段:
//THIS SHOULD BE PERSISTING IT TO THE DATABASE
var user = $firebaseObject(ref.child('users').child(userData.uid));
此代码不会在数据库中存储任何信息。相反,它会尝试从数据库中读取 用户数据。但是因为你一开始就没有把它写在那里,所以读取不会完成任何事情并且 then()
永远不会执行。
解决方案是在用户验证时将必要的用户数据写入数据库。
var user = $firebaseObject(ref.child('users').child(userData.uid));
var newUser = {
emailAddress: $scope.email,
};
user.$ref.$set(newUser);