我正在创建一个允许用户注册的应用。
使用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')
仍然保存了所有内容,但显示的是错误消息。我做错了什么?
答案 0 :(得分:2)
我知道这已经一岁了,但是我遇到了同样的问题,对于遇到同样问题的任何人,这都是一个更直接的解决方案。创建用户时,用户对象是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
})
})
答案 1 :(得分:0)
好的,终于让它运转了。我做的是,在第一个之后,检查当前用户(因为用户将自动登录),然后获取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
})
}
}
这很有效。
答案 2 :(得分:0)
您没有说是否要在动作创建者的上下文中使用它,但如果您这样做了,这是另一种可能的解决方案。让我们变得更有趣,它是一个用于添加新员工的应用程序:
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';
答案 3 :(得分:0)
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%工作!