Как сказано в названии.
Мне нужно связать аутентифицированного пользователя с базой данных.
Так что другой пользователь может видеть только свои данные.
Я успешно реализовал функцию аутентификации Firebase.
Но запись не сохраняется в базе данных реального времени, и я не знаю, как это сделать.
Может кто-нибудь, пожалуйста, научите меня, как я могу сделать такую функцию?
Я попробовал базу данных, и я примерно знаю, что она использует (push) для создания уникального идентификатора, чтобы дифференцировать пользователя. Но я все еще не знаю, как объединить это с функцией аутентификации.
Следующий код является моей функцией входа в систему () и регистрации ()
login (){
const validate = this.refs.formId.getValue();
if (validate) {
firebase.auth().signInWithEmailAndPassword(validate.email, validate.password)
.then(() => {
})
.catch((error) => {
const errorCode = error.code;
const errorMessage = error.message;
if (errorCode === 'auth/wrong-password') {
Toast.show({ text: `${Strings.ST30}`, position: 'bottom', buttonText: `${Strings.ST33}` })
}
else if (errorCode === 'auth/user-not-found') {
Toast.show({ text: `${Strings.ST31}`, position: 'bottom', buttonText: `${Strings.ST33}` })
}
else{
Toast.show({ text: `${Strings.ST32}`, position: 'bottom', buttonText: `${Strings.ST33}` })
}
});
}
}
register () {
const validate = this.refs.form.getValue();
if(this.validate) {
const errorHandler = ((e)=>{
console.log(e);
if(e.code == 'auth/email-already-in-use'){
Toast.show({ text: `${Strings.ST36}`, position: 'bottom', buttonText: `${Strings.ST33}` })
} else {
Toast.show({ text: `${Strings.ST32}`, position: 'bottom', buttonText: `${Strings.ST33}` })
}
})
firebase.auth().createUserWithEmailAndPassword(validate.email,validate.password).then((response) => {
firebase.auth().currentUser.updateProfile({
displayName : validate.name,
}).then(()=>{
}).catch(errorHandler);
}).catch(errorHandler)
}}
Большое спасибо за ваше время и помощь. Цените это много!
Редактировать 2:
firebase.auth()
.createUserWithEmailAndPassword(validate.email,validate.password)
.then((response) => {
firebase.auth().currentUser.updateProfile({
displayName : validate.name,
}).then(()=>{
firebase.database()
.ref('users/' + firebase.auth().currentUser.uid + "/profile")
.set({
Username: validate.name,
UserEmail: validate.email,
CreationDate: d1.getFullYear() + "/" + (d1.getMonth() + 1) + "/" + d1.getDate()
})
}).catch(errorHandler);
}).catch(errorHandler)
}}
Я успешно связался с базой данных Firebase Realtime.
Но я не могу писать и читать другие функции из моей базы данных.
Это мои правила для базы данных Firebase. Могу ли я узнать, какую часть я должен изменить?
{
"rules": {
".read": false,
".write": false,
"users":
{
"$userId":
{
".read": "auth.uid === $userId",
".write": "auth.uid === $userId"
}
}
}
}
Редактировать 3: (ExampleSendData.js)
конструктор (реквизит) {
супер (реквизит)
this.state = {
сообщение: '',
Сообщения: []
}
this.addItem = this.addItem.bind (this);
}
componentDidMount() {
firebase
.database()
.ref()
.child("messages")
.once("value", snapshot => {
const data = snapshot.val()
if (snapshot.val()) {
const initMessages = [];
Object
.keys(data)
.forEach(message => initMessages.push(data[message]));
this.setState({
messages: initMessages
})
}
});
firebase
.database()
.ref()
.child("messages")
.on("child_added", snapshot => {
const data = snapshot.val();
if (data) {
this.setState(prevState => ({
messages: [data, ...prevState.messages]
}))
}
})
}
addItem () {
if (!this.state.message) return;
const newMessage = firebase.database().ref()
.child("messages")
.push();
newMessage.set(this.state.message, () => this.setState({message: ''}))
}
render() {
return (
<View style={styles.container}>
<View style={styles.msgBox}>
<TextInput placeholder='Enter your message'
value={this.state.message}
onChangeText={(text) => this.setState({message: text})}
style={styles.txtInput}/>
<Button title='Send' onPress={this.addItem}/>
</View>
<FlatList data={this.state.messages}
renderItem={
({item}) =>
<View style={styles.listItemContainer}>
<Text style={styles.listItem}> {item}
</Text>
</View>
}
/>
</View>
);
}
}