Получение этой ошибки при попытке добавить расход в базу данных firebase:
Uncaught Error: Reference.push failed: first argument contains NaN in property 'users.mzsNqPucvWZMWuyo4sThlMqyR1k2.expenses.km'
в Validation.js и Reaction-dom.development.js
Получение предупреждения о пожаре.
FIREBASE WARNING: set at /users/mzsNqPucvWZMWuyo4sThlMqyR1k2/expenses/-LAsp1j0HVUP-1Y32UMd failed: permission_denied
И затем обещание отлавливает запрещенное разрешение, хотя я установил для правил .read и .write значение true в правилах firebase.
Uncaught (in promise) Error: PERMISSION_DENIED: Permission denied
at Repo.js:527
Фрагменты кода, которые могут помочь. До сих пор не знаю, как избавиться от запрещенного разрешения.
Правила пожарной базы для справки:
"rules": {
".read": true,
".write": true,
"users": {
"$user_id": {
".read": "$user_id === auth.uid",
".write": "$user_id === auth.uid",
"expenses": {
"$expense_id": {
".validate": "newData.hasChildren(['title', 'amount', 'details', 'createdAt', 'category', 'km'])",
"title": {
".validate": "newData.isString() && newData.val().length > 0"
},
"amount": {
".validate": "newData.isNumber()"
},
Действие по добавлению расходов (прирост)
const {
title = '',
details = '',
amount = 0,
createdAt = 0,
category = '',
km = 0
} = expenseData;
const expense = { title, details, amount, createdAt, category, km };
database.ref(`users/${uid}/expenses`).push(expense).then((ref) => {
dispatch(addExpense({
id: ref.key,
...expense
}));
});
Я получаю эту ошибку при отправке формы, поэтому я включу ее.
Добавить Exp
export class AddExp extends React.Component {
onSubmit = (expense) => {
this.props.startAddExp(expense);
this.props.history.push('/');
};
render() {
return (
<div>
<div>
<ExpenseForm
path={this.props.location.pathname}
onSubmit={this.onSubmit}/>
</div>
</div>
)
}
}
Форма расходов onSubmit ()
onSubmit = (e) => {
e.preventDefault();
if (!this.state.title || !this.state.amount) {
this.setState(() => ({ error: 'Error'}))
} else {
this.setState(() => ({ error: 'error' }));
this.props.onSubmit({
title: this.state.title,
amount: parseFloat(this.state.amount, 10) * 100,
createdAt: this.state.createdAt.valueOf(),
details: this.state.details,
category: this.state.category,
km: parseFloat(this.state.km, 10) * 100
});
}
};
Я не думаю, что это связано с кодом, похоже, что firebase предотвращает вставку.