Firebase 在第一次后拒绝许可然后在第二次工作
Firebase denies permission after first time then works on second time
Firebase 在第一次将数据推送到实时数据库后拒绝权限...但是当我第二次推送数据时又可以工作...
export const writeClass = async (
courseId,
topicName,
classIntro,
youtubeLinkId,
classNoteLink
) => {
const dbRef = ref(getDatabase());
try {
const totalClasses = await get(
child(dbRef, `Courses/${courseId}/totalClasses`)
);
var totalClassesNum = parseInt(totalClasses.val()) + 1;
console.log(totalClasses.val());
const msg = await update(
ref(db, `Courses/${courseId}/classes/${totalClassesNum}`),
{
classIntro: classIntro,
topicName: topicName,
youtubeLinkId: youtubeLinkId,
classNoteLink: classNoteLink,
}
)
.then(() => {
update(ref(db, `Courses/${courseId}`), {
totalClasses: totalClassesNum,
});
console.log("Section added");
return true;
})
.catch((error) => {
console.log(error.message);
// alert(error.message)
return error.message;
});
return msg;
} catch (error) {
// alert(error.message)
console.log(error);
}
};
Firebase 规则:
".write" :
"root.child('specialUsers').child(auth.uid).child('is_admin').val()
=== true
当页面 reloads/app 重新启动时,Firebase 会自动恢复登录用户,但这需要它调用服务器(检查 a.o。帐户是否被禁用)并且可能需要一些时间。
这意味着您的代码首次运行时,用户可能尚未登录,您需要在代码中进行检查。问题发生在您的代码中的确切位置有点不清楚,但您需要将其包装在:
if (firebase.auth().currentUser !== null) {
...
}
更好的方法是在用户登录或注销时做出反应,您可以按照 getting the currently signed in user:
文档中的第一个片段所示进行操作
import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth();
onAuthStateChanged(auth, (user) => {
if (user) {
// User is signed in, see docs for a list of available properties
// https://firebase.google.com/docs/reference/js/firebase.User
const uid = user.uid;
// ...
} else {
// User is signed out
// ...
}
});
Firebase 在第一次将数据推送到实时数据库后拒绝权限...但是当我第二次推送数据时又可以工作...
export const writeClass = async (
courseId,
topicName,
classIntro,
youtubeLinkId,
classNoteLink
) => {
const dbRef = ref(getDatabase());
try {
const totalClasses = await get(
child(dbRef, `Courses/${courseId}/totalClasses`)
);
var totalClassesNum = parseInt(totalClasses.val()) + 1;
console.log(totalClasses.val());
const msg = await update(
ref(db, `Courses/${courseId}/classes/${totalClassesNum}`),
{
classIntro: classIntro,
topicName: topicName,
youtubeLinkId: youtubeLinkId,
classNoteLink: classNoteLink,
}
)
.then(() => {
update(ref(db, `Courses/${courseId}`), {
totalClasses: totalClassesNum,
});
console.log("Section added");
return true;
})
.catch((error) => {
console.log(error.message);
// alert(error.message)
return error.message;
});
return msg;
} catch (error) {
// alert(error.message)
console.log(error);
}
};
Firebase 规则:
".write" :
"root.child('specialUsers').child(auth.uid).child('is_admin').val()
=== true
当页面 reloads/app 重新启动时,Firebase 会自动恢复登录用户,但这需要它调用服务器(检查 a.o。帐户是否被禁用)并且可能需要一些时间。
这意味着您的代码首次运行时,用户可能尚未登录,您需要在代码中进行检查。问题发生在您的代码中的确切位置有点不清楚,但您需要将其包装在:
if (firebase.auth().currentUser !== null) {
...
}
更好的方法是在用户登录或注销时做出反应,您可以按照 getting the currently signed in user:
文档中的第一个片段所示进行操作import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth();
onAuthStateChanged(auth, (user) => {
if (user) {
// User is signed in, see docs for a list of available properties
// https://firebase.google.com/docs/reference/js/firebase.User
const uid = user.uid;
// ...
} else {
// User is signed out
// ...
}
});