反应原生 firebase 创建用户,然后将其他数据添加到实时数据库
Posted
技术标签:
【中文标题】反应原生 firebase 创建用户,然后将其他数据添加到实时数据库【英文标题】:React native firebase creating user then adding additional data to realtime database 【发布时间】:2018-04-28 10:53:49 【问题描述】:我正在创建一个允许用户自己注册的应用程序。
使用 react-native 和 firebase 工作,注册并登录。甚至附加数据也存储在实时数据库中(我检查过)。 但是我收到一条消息说“创建用户失败”(这是我设置的消息之一)。
这是我用来创建用户并向实时数据库添加额外数据的代码:
firebase.auth().createUserWithEmailAndPassword(email, password)
.then((user) =>
firebase.database().ref('users/' + user.uid).set(
firstName: firstName,
lastName: lastName,
email: email,
code: code
)
)
.then(user => loginUserSuccess(dispatch, user))
.catch((error) =>
createUserFail(dispatch)
console.log(error);
);
我还检查了android studio中的调试器(还不知道ios),看到如下评论:
TypeError: undefined is not an object (evaluating 'user.uid')
仍然保存了所有内容,但显示了错误消息。我做错了什么?
【问题讨论】:
你用的是什么库? 看起来问题出在user.uid
附近,你能不能用console.log 和console.log firebase.database().ref('users/' + user.uid)
看看你得到了什么。
会尽力回复您
@mjwatts 我尝试了 console.log,第一个是记录 user.uid,我明白了。第二个是 url:urltofirebase/users/the 与第一个 console.log 相同的 uid。我将 console.logs 放在了第一个然后就在 firebase 之前。
【参考方案1】:
我知道这已经有一年了,但我遇到了同样的问题,对于遇到同样问题的人来说,这里有一个更直接的解决方案。创建用户时,用户对象是 Firebase 响应的一部分,而不是响应本身。因此,只需将“res”添加到您的原始代码中,如下所示:
firebase.auth().createUserWithEmailAndPassword(email, password)
.then((res) =>
firebase.database().ref('users/' + res.user.uid).set(
firstName: firstName,
lastName: lastName,
email: email,
code: code
)
)
【讨论】:
【参考方案2】:好的,我终于搞定了。我所做的是,在第一次之后,检查当前用户(因为用户将自动登录),然后获取 uid 并使用它:
if (firebase.auth().currentUser)
userId = firebase.auth().currentUser.uid;
if (userId)
firebase.database().ref('users/' + userId).set(
firstName: firstName,
lastName: lastName,
email: email,
code: code
)
这行得通。
【讨论】:
【参考方案3】:firebase.auth().createUserWithEmailAndPassword(email, password).then((user)=>
if (firebase.auth().currentUser)
userId = firebase.auth().currentUser.uid;
if (userId)
firebase.database().ref('users/' + userId).set(
firstname:firstname,
lastname:lastname,
email:email,
password:password,
town:town,
addInterest:addInterest,
photoUrl:false,
emailVerified:false,
uid:userId,
status:true,
online:true
)
).catch(function(error)
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log('Register!');
console.log(error);
)
完整代码非常易于使用。 100% 工作!
【讨论】:
请始终将您的答案放在上下文中,而不仅仅是粘贴代码。有关详细信息,请参阅here。【参考方案4】:你没有说你是否在动作创建者的上下文中使用它,但如果你这样做了,这是另一种可能的解决方案。让我们让它更有趣,它是一个添加新员工的应用程序:
export const employeeCreate = ( name, phone, shift ) =>
const currentUser = firebase.auth();
return () =>
firebase
.database()
.ref(`/users/$currentUser.uid/employees`)
// add a .then() to ensure after employee is created
// we want to navigate them back to employee list screen
.push( name, phone, shift )
.then(() => Actions.pop());
;
;
Actions
将从 react-native-router-flux
导入,如下所示:
import firebase from 'firebase';
import Actions from 'react-native-router-flux';
【讨论】:
以上是关于反应原生 firebase 创建用户,然后将其他数据添加到实时数据库的主要内容,如果未能解决你的问题,请参考以下文章