我想更新新创建的用户数据。返回的JSON是:
{
"user":{
"uid":"test123",
"displayName":null,
"photoURL":null,
"email":"test12@test.com",
"emailVerified":false,
"phoneNumber":null,
"isAnonymous":false,
"tenantId":null,
"providerData":[
{
"uid":"test12@test.com",
"displayName":null,
"photoURL":null,
"email":"test12@test.com",
"phoneNumber":null,
"providerId":"password"
}
],
"apiKey":"test123",
"appName":"[DEFAULT]",
"authDomain":"test123.firebaseapp.com",
"stsTokenManager":{
"apiKey":"test123",
"refreshToken":"test123",
"accessToken":"test123",
"expirationTime":1571238989357
},
"redirectEventId":null,
"lastLoginAt":"1571235389108",
"createdAt":"1571235389108"
},
"credential":null,
"additionalUserInfo":{
"providerId":"password",
"isNewUser":true
},
"operationType":"signIn"
}
这是我的标注和更新:
createUser = async (userData) => {
return await firebase.auth().createUserWithEmailAndPassword(userData.get('userName'), userData.get('password'))
.then((authData) => {
firebase.database().ref('users/' + authData.user.uid + '/').set({
fullName: userData.get('fullName'),
pictures: userData.get('pictures'),
phoneNumber: userData.get('phoneNumber')
});
})
};
是否可以向用户表自定义字段添加内容?
一些事情正在发生。似乎在.then语句中看不到userData。因此,为了解决这个问题,我尝试将userData JSON作为参数传递。这没有用。然后,我从userData中分解出每个值,将其保存到const中并传递该值。这没有用。
我可以看到userData在.then语句之前包含值。我能够使用正确的用户名和密码成功创建一个新用户。这对我来说意味着:
A-我没有正确传递userData
JSON或
B-不允许像我一样将数据传递到Firebase
我的最终目标是注册一个用户,然后从注册表单(也称为userData)中获取他们输入的所有数据,并使用该表单更新用户表。
我正在使用的文章是: https://firebase.google.com/docs/auth/web/manage-users https://medium.com/mindorks/firebase-realtime-database-with-react-native-5f357c6ee13b
调用createUser函数的主类:
const signUp = (dispatch) => {
return async (userData)=>{
try{
const response = await config.createUser(userData);
console.log('sign up resonse1: ' + response); //coming back as undefined
//todo:: figure out how to parse out the apikey out of response
await AsyncStorage.setItem('token', '123mockToken');
dispatch({type: 'sign_up', payload: '123mockToken'});
navigate('mainFlow');
} catch(e){
dispatch({type: 'add_error', payload: '' + e}); //we call dispatch anytime we want to update our state
}
}
};
答案 0 :(得分:3)
我知道参数userData
包含您要用于创建用户的所有数据(“他们从注册表单中输入的所有数据”)。
以下方法应该起作用:
createUser = async userData => {
try {
const userCredential = await firebase
.auth()
.createUserWithEmailAndPassword(
userData.get('userName'),
userData.get('password')
);
const userId = userCredential.user.uid;
await firebase
.database()
.ref('users/' + userId + '/')
.set({
fullName: userData.get('fullName'),
pictures: userData.get('pictures'),
phoneNumber: userData.get('phoneNumber')
});
return userId; //As per your comment below
} catch (error) {
return error;
}
};
createUserWithEmailAndPassword()
方法返回一个UserCredential
,其中包含一个User
。