情况一:
根据 firebase 文档 (https://www.firebase.com/docs/web/api/firebase/createuser.html),创建用户不会自动对其进行身份验证。首先需要额外调用authWithPassword()。为了确保用户在没有有效数据的情况下不会通过身份验证,您可以在验证之前对服务器运行检查以确保数据正确保存。
编辑:没关系;看起来 firebase 现在会进行自动身份验证 - 看看我在下面写的内容。
现在,这种方法的一个问题是,如果您的应用允许人们使用像 gmail 这样的 OAuth 提供者进行身份验证,那么在对他们进行身份验证之前就没有创建用户的功能。您可能需要做的是从 Firebase 中提取用户数据,确定其是否有效,如果无效则显示一个弹出窗口或重定向,让用户修复任何无效数据。
情况二:
如果您想确保在他们从控制台调用 createUserWithEmailAndPassword() 的情况下不会创建新用户,您可以使用 promises 尝试类似的操作;
var createUserWithEmailAndPassword = function(username, password) {
var promise = isNewUserValid(username, password);
promise.then(function() {
// Code for creating new user goes here
});
}
通过这种方式,您永远不会公开创建新用户的实际代码,因为它存在于匿名函数中。
我认为这不能完全解决问题,因为 firebases API 可以让任何人使用某些东西创建帐户
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
ref.createUser({
email: "bobtony@firebase.com",
password: "correcthorsebatterystaple"
}
(取自https://www.firebase.com/docs/web/api/firebase/createuser.html)
如果您想确保服务器端永远不能创建具有相同用户名的用户,则需要查看 firebases 的规则,特别是 .validate
使用它,您可以确保用户名不存在,以验证为帐户创建用户名的操作。
这是关于规则的 firebase 文档:https://www.firebase.com/docs/security/quickstart.html
这是另一个关于堆栈溢出的问题,与您的问题非常相似。 Enforcing unique usernames with Firebase simplelogin Marein 的回答是实现服务器端验证的一个很好的起点。