问题
我正在使用Firebase工具,如身份验证、函数和;Firestore等。我用React Native做了一个应用程序,它有一个登录名。现在,我想实现一些逻辑来强制用户更改密码。用户的auth通过其uid与Firestore中的用户文档链接。
我试图在用户文档中创建一个布尔值。名为changePassword的布尔值。当我想让用户在水下更改密码时,我会将密码更改为随机字符串,并将此布尔值设置为true。当用户登录时,他们的密码被更改,他会自动注销。当试图登录时,用户会收到一条消息/小吃条,询问他们是否想通过发送邮件更改密码的按钮来更改密码。
这一切都很好,但现在我想在我的firebase函数中创建一个函数来检查密码是否被更改。所以我可以将布尔更改密码设置为false。
什么是最佳实践,因为文档中说只能创建和删除授权。https://firebase.google.com/docs/auth/extend-with-functions
代码
React Native
Main.tsx
if (user && user.emailVerified) {
const doc = await firestore.collection("users").doc(user.uid).get();
User.setCurrentUser(doc);
setAuthenticated(true);
…
} else {
setAuthenticated(false);
}
登录.tsx
const loginPress = async () => {
const query = firebase.firestore().collection("users")
.where('email', ' == ', email.toLowerCase())
const snapshot = await query.get();
const formatted = snapshot.docs.map((doc: any) => doc.data());
const user = formatted[0];
if (user?.changePassword) {
props.navigation.navigate('ForgotPassword', { email: email, changePassword: true });
} else {
firebase.auth().signInWithEmailAndPassword(email, password).then((result) => {
...
}).catch ((error) => {
let errorMessage = error.message;
...
});
}
Keyboard.dismiss();
}
Firebase函数
触发器/onUpdate.ts
在函数中,我想要一些类似下面的东西,但这是不可能的:
exports.passwordGotChanged = functions.auth.user().onUpdate((snapshot: any) => {
const before = snapshot.before.data();
const after = snapshot.after.data();
if (JSON.stringify(before.password) !== JSON.stringify(after.password)) {
return functions.firestore.document('/users/{after.uid}').set({ changePassword: false }, { merge: true });
} else {
return null
}
});
第S页
也许这是《如何在密码更改时触发Firebase中的云功能?但是提供的解决方案对我来说不起作用,也许有新的解决方案
当用户的配置文件更新或密码更改时,不可能自动触发函数。没有onUpdate触发器。
如果你想在客户端更新他们的配置文件或更改密码时在后端做一些事情,你的客户端应用程序必须直接调用某种端点。如果您使用的是Cloud Function,则通常使用HTTP或可调用函数来完成此操作。没有提供解决方案——这是你必须为自己构建的,以满足你的特定用例。